我有一個 csv,它的值分布在這樣的多行中(實際資料大約有 70 列)
id | name | alias
1 | Amy | Potato
| | Fortress
2 | Bill | Gyroscope
...
現在我想將它匯入資料框。棘手的部分是將別名讀取到陣列中(如果有多個)。從上面的例子我們應該得到Amy [Potato, Fortress]和Bill [Gyroscope]
我可以通過逐行處理來做到這一點,但如果有一些更智能的內置方式,我會徘徊。
UPD:明確要求
uj5u.com熱心網友回復:
如果您的 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]
uj5u.com熱心網友回復:
如果您的資料如下所示,如您所描述:
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 Gyroscope
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414866.html
標籤:
