Python:将 JSON 从 df 列转换为单独的 df 列
python 197
原文标题 :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
回复
我来回复-
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年前