簡體   English   中英

如何將字典格式的數據框中的列轉換為單獨的列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM