Pandas - 根据一个列的字典向DataFrame添加列

4

我有以下的 pandas.DataFrame

enter image description here

数据框中的一列,pontos,每行都包含一个字典。

我想要做的是为该字典中的每个键添加一个新的数据框列。因此,在这个例子中,新的列将是:rodadames等,对于每一行,这些列将被填充相应字典中的值。

到目前为止,我已经尝试了以下代码来获取其中一个键的值:

df_times["rodada"] = [df_times["pontos"].get('rodada') for d in df_times["pontos"]]

然而,我得到了一个新的列rodada,其中填充了None值:

enter image description here

我做错了什么?

3个回答

6
你可以创建一个新数据帧,然后像这样将其与当前数据帧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

2
你只需要稍微改变你的理解方式就能提取出那些数据。
应该是这样的:

df_times["rodada"] = [d.get('rodada') for d in df_times["pontos"]]

你想要字典键“rodada”的值成为你新列的基础。所以你在循环中遍历这些字典条目,也就是d,然后通过键提取值来创建新列。

0

你也可以使用join和pandas apply函数:

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

不鼓励仅提供代码的答案。请添加一些解释,说明如何解决问题,或者与现有答案的区别。来自审核 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接