Pandas - 从其中一个列添加到基于Dict的DataFrame中的列

时间:2017-05-27 15:48:06

标签: python pandas dictionary

我有以下and

enter image description here

Dataframe的一个列pandas.DataFrame为每一行保存一个字典。

我想要做的是为此dict中的每个键向DataFrame添加一列。因此,在此示例中,新列将是:pontosrodada等,对于每一行,这些列将使用dict中的相应值进行填充。

到目前为止,我已尝试使用以下其中一个键:

mes

但是,因此我收到了一个填充df_times["rodada"] = [df_times["pontos"].get('rodada') for d in df_times["pontos"]] 值的新列rodada

enter image description here

我做错了什么提示?

3 个答案:

答案 0 :(得分:2)

您可以创建一个新的数据框,并将concat创建为当前的数据框,如:

代码:

df2 = pd.concat([df, pd.DataFrame(list(df.pontos))], axis=1)

测试代码:

import pandas as pd

df = pd.DataFrame([
    ['A', dict(col1='1', col2='2')],
    ['B', dict(col1='3', col2='4')],
], columns=['X', 'D'])

print(df)

df2 = pd.concat([df, pd.DataFrame(list(df.D))], axis=1)
print(df2)

结果:

   X                           D
0  A  {'col2': '2', 'col1': '1'}
1  B  {'col2': '4', 'col1': '3'}

   X                           D col1 col2
0  A  {'col2': '2', 'col1': '1'}    1    2
1  B  {'col2': '4', 'col1': '3'}    3    4

答案 1 :(得分:1)

您只需稍微改变一下您的理解就可以提取数据。

应该是:

  

df_times [“rodada”] = [d.get('rodada')表示d in   df_times [ “庞都”]]

您希望字典键'rodada'的值成为新列的基础。所以你迭代循环中的那些字典条目 - 换句话说,d,然后按键提取值以创建新列。

答案 2 :(得分:0)

您还可以使用join和pandas Apply功能:

df=df.join(df['pontos'].apply(pd.Series))