如何将json列迭代到列,然后附加原始数据帧?

时间:2019-03-21 13:03:57

标签: python pandas

import pandas as pd
inp = [{'c1':10,'cols':{'c2':20,'c3':'str1'}, 'c4':'41'}, {'c1':11,'cols':{'c2':20,'c3':'str2'},'c4':'42'}, {'c1':12,'cols':{'c2':20,'c3':'str3'},'c4':'43'}]
df = pd.DataFrame(inp)
print (df)

df是:

   c1  c4                      cols
0  10  41  {'c2': 20, 'c3': 'str1'}
1  11  42  {'c2': 20, 'c3': 'str2'}
2  12  43  {'c2': 20, 'c3': 'str3'}

cols列是JSON类型。

我需要将cols列设为json_decode,这意味着将df更改为:

   c1    c4    c2      c3
0  10    41    20      str1
1  11    42    20      str2
2  12    43    20      str3

该怎么做?
预先感谢!

3 个答案:

答案 0 :(得分:2)

使用pd.io.json.json_normalize

y

输出

Matrix

如果您有setPolyToPoly,请使用Matrix.scaleM(modelMatrix, 0, -1F, 1F, 1F);

转换回来
pd.io.json.json_normalize(inp)

答案 1 :(得分:1)

使用DataFrame.pop提取列,转换为numpy数组和列表,并传递给DataFrame构造函数,最后DataFrame.join原始:

df = df.join(pd.DataFrame(df.pop('cols').values.tolist(), index=df.index))
print (df)
   c1  c4  c2    c3
0  10  41  20  str1
1  11  42  20  str2
2  12  43  20  str3

答案 2 :(得分:0)

您可以使用:

df = df.join(pd.DataFrame.from_dict(df['cols'].tolist()))
df.drop('cols', axis=1, inplace=True)
print(df)

输出:

   c1  c4  c2    c3
0  10  41  20  str1
1  11  42  20  str2
2  12  43  20  str3