【发布时间】:2021-06-03 21:27:00
【问题描述】:
关于同一主题还有其他问题,它们有所帮助,但我有一个额外的转折。
我有一个数据框,每个(但不是全部)单元格中有多个值。
df = pd.DataFrame({'a':["10-30-410","20-40-500","25-50"], 'b':["5-8-9","4", "99"]})
| index | a | b |
|---|---|---|
| 0 | 10-30-410 | 5-8-9 |
| 1 | 20-40-500 | 4 |
| 2 | 25-50 | 99 |
如何用破折号“-”分割每个单元格并创建三个新数据框?请注意,并非所有单元格都有多个值,在这种情况下,第二个和第三个数据帧会变为 NA 或空白(将它们视为字符串)。
所以我需要 df1 成为这些值中的第一个:
| index | a | b |
|---|---|---|
| 0 | 10 | 5 |
| 1 | 20 | 4 |
| 2 | 25 | 99 |
df2 将是:
| index | a | b |
|---|---|---|
| 0 | 30 | 8 |
| 1 | 40 | |
| 2 | 50 |
df3 也是如此:
| index | a | b |
|---|---|---|
| 0 | 410 | 9 |
| 1 | 500 | |
| 2 |
我用这个得到了 df1
df1 = df.replace(r'(\d+).*(\d+).*(\d+)+', r'\1', regex=True)
但是 df2 不太好用。我得到了第二个值,还有 4 和 99,它们应该是空白的。
df2 = df.replace(r'(\d+)-(\d+).*', r'\2', regex=True)
| index | a | b |
|---|---|---|
| 0 | 30 | 8 |
| 1 | 40 | 4 - should be blank |
| 2 | 50 | 99 - should be blank |
这是正确的方法吗?我很擅长正则表达式,但对组很模糊。谢谢。
【问题讨论】:
标签: python python-3.x pandas dataframe split