![](/img/trans.png)
[英]How to convert dataframe column which contains list of dictionary into separate columns?
[英]How do a convert a column in a dataframe that is in the format of a dictionary into separate columns?
我有一個pandas數據框,其中第一列的格式是字典,盡管類型是object。 我想將此字段轉換為附加到原始數據幀的3個單獨的字段-3個字段由字典中的3個鍵驅動; 卡,玩家和轉牌。 我的數據框如下所示:
card player turn
0 {'name': 'Tap', 'cost': 2, 'id': '056'} me 2
1 {'name': 'Coin', 'cost': None, 'id': '051'} opponent 2
2 {'name': 'Pawnbroker', 'cost': 3,'id': '055'} 2
3 {'name': 'fire', 'cost': 2, 'id': 'E1_596'} me 3
4 {'name': 'Coil', 'cost': 1, 'id': 'E1_56'} me 3
5 {'name': 'Pawnbroker', 'cost': 3, 'id': 'E6'} 3
假設您的字典列稱為“ foo”:
df = pd.concat([df, df['foo'].apply(pd.Series)], axis=1)
# card foo player turn cost id name
#0 me {'cost': 2, 'id': '056', 'name': 'Tap'} 2 2.0 056 Tap
#1 opponent {'cost': None, 'id': '051', 'name': 'Coin'} 2 NaN 051 Coin
現在,您可以刪除不需要的列:
del df['foo']; print(df)
# card player turn cost id name
#0 me 2 2.0 056 Tap
#1 opponent 2 NaN 051 Coin
您可以使用pop
刪除要刪除的列到card
,然后DataFrame constructor
帶有concat
DataFrame constructor
:
print (pd.concat([df, pd.DataFrame(df.pop('card').values.tolist())],axis=1))
player turn cost id name
0 me 2.0 2.0 056 Tap
1 opponent 2.0 NaN 051 Coin
2 2 NaN 3.0 055 Pawnbroker
3 me 3.0 2.0 E1_596 fire
4 me 3.0 1.0 E1_56 Coil
5 3 NaN 3.0 E6 Pawnbroker
時間 :
#[6000 rows x 3 columns]
df = pd.concat([df]*1000).reset_index(drop=True)
In [391]: %timeit (df['card'].apply(pd.Series))
1 loop, best of 3: 1.26 s per loop
In [392]: %timeit (pd.DataFrame(df['card'].values.tolist()))
100 loops, best of 3: 6.72 ms per loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.