【问题标题】:How to flatten double-nested json file in Pandas如何在 Pandas 中展平双嵌套 json 文件
【发布时间】:2021-12-16 08:31:35
【问题描述】:

我需要将 json 文件转换为数据框,但是该 json 文件的列中有嵌套数据。我能够使用 pd.json_normalize(data=df['column']) 成功转换具有一层嵌套的列

{'ts_tc': '2021-10-21T21:50:05.121Z', 'line_of_business': 'kiosk', 'consent_status': 'active'}

我的问题是我有另一列字典列表具有数组形式的双重嵌套数据,其中 epd 是另一个字典。

[{'uid': 'abcd', 'sid': '1234', 'sc': 'false', 'epd': '{"value1":"66.72","value2":"66.72123"}'}, {'uid': 'abcd', 'sid': '1234', 'epd': '{"value1":"69.72","value2":"69.72123"}'}]

当我使用 pd.json_normalize 时,我得到了 'list' object has no attribute 'values' 错误消息。我也尝试了 flatten_json 库,但它对我不起作用。 如何完全展平数据框,以便拥有:

uid sid sc value1 value2
abcd 1234 false 66.72 66.72123
abcd 1234 69.72 69.72123

【问题讨论】:

  • epd 中的值不是另一个字典是字符串..

标签: python json pandas


【解决方案1】:

如果 epd 字段的键可能会发生变化,你会更安全地逐行进行:

import pandas as pd
import json

json_data = [{'uid': 'abcd', 'sid': '1234', 'sc': 'false', 'epd': '{"value1":"66.72","value2":"66.72123"}'}, {'uid': 'abcd', 'sid': '1234', 'epd': '{"value1":"69.72","value2":"69.72123"}'}]

df = pd.DataFrame(json_data)
    
for i in range(len(df)):
    nested_data = json.loads(df.at[i, 'epd'])
    for key in nested_data:
        df.at[i, key] = nested_data[key]
del df['epd']

print(df)

输出:

    uid   sid     sc value1    value2
0  abcd  1234  false  66.72  66.72123
1  abcd  1234    NaN  69.72  69.72123

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 2021-10-09
    • 2021-12-03
    • 2020-03-08
    • 2021-05-14
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多