Python:将 JSON 从 df 列转换为单独的 df 列

原文标题Python: Convert JSON from df column into individual df columns

我有一个看起来像这样的 excel 文件:

Header1 Header2 Header3
data data [{“key1″:”123″,”key2″:”Value1”},{“key1″:”123″,”key2″:”Value2”}, {“key1″:”123″,”key2″:”Value3”}]
data data [{“key1″:”123″,”key2″:”Value1”},{“key1″:”123″,”key2″:”Value2”}, {“key1″:”123″,”key2″:”Value3”}]

Header3 包含如下所示的 JSON 字符串

[
{"key1":"123","key2":"Value1"},
{"key1":"123","key2":"Value2"}, 
{"key1":"123","key2":"Value3"}
]

我想解析 JSON Header3 列,并为每个键创建一个列,其中键的名称附加键 2 的值,键在整个文件中始终相同。

最终数据框应如下所示:

Header1 Header2 Key1.Value1 Key2.Value1 Key1.Value2 Key2.Value2
data data 123 Value1 123 Value2
data data 123 Value1 123 Value2

实际示例:

Company JSON
Amazon [{“charge1″:”500”, “charge2″:”200″,”card”:”Visa”},{“charge1″:”234”, “charge2″:”654″,”card”:”Amex”}
Apple [{“charge1″:”689”, “charge2″:”433″,”card”:”Visa”},{“charge1″:”25434”, “charge2″:”6554644″,”card”:”Amex”}]

需要变成:

Company charge1.Visa charge2.Visa card.Visa charge1.AMEX charge2.AMEX card.AMEX
Amazon 500 200 Visa 234 654 Amex
Apple 689 433 Visa 25434 6554644 Amex

在进入花哨的东西之前,我尝试至少规范化数据,但我返回的是一个空序列。

df = pd.read_excel('test.xlsx')
pd.json_normalize(df.JSON)

Output:
0
1
2
3
4
5
...
188 rows x 0 columns

原文链接:https://stackoverflow.com//questions/71962543/python-convert-json-from-df-column-into-individual-df-columns

回复

我来回复
  • Code Different的头像
    Code Different 评论

    您无法对其进行规范化,因为它是从 Excel 中作为字符串加载的。试试这个:

    import json
    
    s = df["JSON"].apply(json.loads).explode()
    tmp = (
        pd.DataFrame(s.to_list(), index=s.index)
        .set_index("card", append=True)
        .unstack()
    )
    tmp.columns = [".".join(col) for col in tmp.columns]
    
    pd.concat([df[["Company"]], tmp], axis=1)
    

    card.*列看起来有点奇怪。如果您知道您指的是哪一列,那么您已经知道它的值,那么为什么要将它包含在输出数据框中呢?

    2年前 0条评论