在数据帧中通过Pandas dict循环

时间:2017-02-10 15:16:06

标签: python pandas dictionary dataframe

我有一个包含列的数据框,每行包含一个dict。

我想提取那些字典并将它们转换为数据帧,以便我可以将它们合并在一起。

最好的方法是什么?

类似的东西:

for row in dataframe.column:
    dataframe_loop = pd.DataFrame(dataframe['column'].iloc(row), columns=['A','B'])
    dataframe_result = dataframe_result.append(dataframe_loop)

3 个答案:

答案 0 :(得分:1)

import pandas as pd

d = {'col': pd.Series([{'a':1}, {'b':2}, {'c':3}])}

df = pd.DataFrame(d)

>>>print(df)

      col 
 0  {'a': 1} 
 1  {'b': 2} 
 2  {'c': 3}

res = {}

for row in df.iterrows():
    res.update(row[1]['col'])

>>>print(res) 
{'b': 2, 'a': 1, 'c': 3}

答案 1 :(得分:0)

如果您的列包含dicts,并且您希望从这些dicts中创建数据框,则只需将该列转换为dicts列表并将其直接转换为数据框:

pd.DataFrame(dataframe['column'].tolist())

字典键将成为列。如果您想要其他行为,则需要指定。

答案 2 :(得分:0)

我不知道你dataframe.column中的词汇是什么样的。如果它看起来像下面的字典,我想你可以使用pandas.concat将字典集中在一起。

import pandas as pd

# create a dummy dataframe
dataframe = pd.DataFrame({'column':[{'A':[1,2,3], 'B':[4,5,6]}, \
                                    {'A':[7,8,9], 'B':[10,11,12]}, \
                                    {'A':[13,14,15], 'B':[16,17,18]}]})

#print(dataframe)

res = pd.concat([pd.DataFrame(row, columns=['A', 'B']) for row in dataframe.column], ignore_index=True)

print(res)