我有一个csv,它的值分散在这样的多行上(实际数据大约有70列)
id | name | alias
1 | Amy | Potato
| | Fortress
2 | Bill | Gyroscope
...现在,我想将它导入到dataframe中。如果存在多个别名,则需要将别名读取到数组中。从上面的例子中,我们应该得到Amy [Potato, Fortress]和Bill [Gyroscope]
我可以进行逐行处理,但是如果有更聪明的内置方式,我就在徘徊。
UPD:澄清要求
发布于 2022-01-13 13:51:54
如果您的csv文件看起来像:
id,name,alias
1,Amy,Potato
,,Fortress
2,Bill,Gyroscope您可以使用ffill
df = pd.read_csv('data.csv', dtype=str).ffill()
print(df)
# Output
id name alias
0 1 Amy Potato
1 1 Amy Fortress
2 2 Bill Gyroscope更新
谢谢你的回复!我正在寻找将第1行合并到第0行而不是创建新行的东西。这样我们就能得到艾米土豆,堡垒
使用agg
df = pd.read_csv('data.csv', dtype=str).ffill() \
.groupby('id', as_index=False) \
.agg({'id': 'first', 'name': 'first', 'alias': lambda x: list(x)})
print(df)
# Output
id name alias
0 1 Amy [Potato, Fortress]
1 2 Bill [Gyroscope]发布于 2022-01-13 14:14:06
如果您的数据如下所示:
id | name | alias
1 | Amy | Potato
| | Fortress
2 | Bill | Gyroscope将这些数据保存在data.txt文件中,然后您可以简单地
import pandas as pd
import numpy as np
def str_to_nan(x):
return [np.nan if str(i).strip() == '' else i for i in x]
df = pd.read_csv('data.txt', sep='|').apply(lambda x: str_to_nan(x))
df = df.ffill()Output:
id name alias
0 1 Amy Potato
1 1 Amy Fortress
2 2 Bill Gyroscopehttps://stackoverflow.com/questions/70697593
复制相似问题