将json元素添加到pandas数据框中

时间:2017-01-20 09:51:24

标签: python json pandas

我有一个我创建的熊猫df。 df的结构如下: -

  A  B  C  D
0  a  b  c  NaN
2  x  y  z  NaN
.
.

现在还有一个列表 list1 ,其中json是

之类的元素
[{a:1,b:2},{c:1,d:2},....]

我想将列表中的元素添加到json pandas df中,以便我的df看起来像

  A  B  C  D
0  a  b  c  {a:1,b:2}
2  x  y  z  {c:1,d:2}
.
.

当我做的时候

df['D'].iloc[0] = list[0]

它没有给我一个名为error的索引。我在这做什么错?

1 个答案:

答案 0 :(得分:2)

length list1DataFrame的长度相同的解决方案:

您首先需要使用与Series相同的索引创建df,然后分配到新列:

print (pd.Series(list1, index=df.index))
0    {'b': 2, 'a': 1}
2    {'d': 2, 'c': 1}
dtype: object

df['D'] = pd.Series(list1, index=df.index)
print (df)
  A  B  C                 D
0  a  b  c  {'b': 2, 'a': 1}
2  x  y  z  {'d': 2, 'c': 1}

DataFrame.assign的另一个解决方案:

df = df.assign(D=pd.Series(list1, index=df.index))
print (df)
   A  B  C                 D
0  a  b  c  {'b': 2, 'a': 1}
2  x  y  z  {'d': 2, 'c': 1}

评论解决方案,谢谢Nickil Maveli

df.loc[:, 'D'] = list1

或更好:

df['D'] = list1

print (df)
   A  B  C                 D
0  a  b  c  {'b': 2, 'a': 1}
2  x  y  z  {'d': 2, 'c': 1}

如果长度不同,则有点复杂 - 需要按length的{​​{1}}和df.index的{​​{1}}按位置选择:

length
list1