【问题标题】:How to iterate json column to columns and then append origin dataframe?如何将 json 列迭代到列,然后附加原始数据框?
【发布时间】:2019-03-21 21:53:11
【问题描述】:
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

怎么做?
提前致谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用pd.io.json.json_normalize

    pd.io.json.json_normalize(inp)
    

    输出

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

    如果您有 pd.DataFrame,请使用 to_dict 转换回来

    pd.io.json.json_normalize(df.to_dict('records'))
    

    【讨论】:

    【解决方案2】:

    使用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
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      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
      

      【讨论】:

        猜你喜欢
        • 2020-04-05
        • 2016-08-14
        • 2019-08-05
        • 2019-11-06
        • 2014-06-06
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多