【问题标题】:Flatten column within data frame containing nested dictionaries and lists包含嵌套字典和列表的数据框中的展平列
【发布时间】:2023-02-20 20:51:12
【问题描述】:

我有一个包含 8 列的 pandas 数据框,其中一列由包含嵌套字典的单元格和以下格式的列表组成:{'x1': {'y1': ['z1', 'z2'], 'y2': ['z3', 'z4', 'z5']}, 'x2': {'y1': ['z6', 'z7', 'z8'], 'y2': ['z9', z10']}}

我如何转换此列,以便 x 变量与 y 变量融合并成为列标题(在数据框其余部分的所有剩余列旁边)并且 z 变量成为单元格内的数据?

由于这不是 JSON 格式,因此 json_normalize() 不起作用。我尝试了不同的方法来 .stack 和 .unstack,但收效甚微。

【问题讨论】:

  • 预期的输出不清楚,你能提供清楚吗?还有输入数据帧的构造函数

标签: pandas dataframe dictionary nested


【解决方案1】:

json_normalize 似乎在做你期望的事情:

df = pd.DataFrame({'col': [{'x1': {'y1': ['z1', 'z2'], 'y2': ['z3', 'z4', 'z5']}, 'x2': {'y1': ['z6', 'z7', 'z8'], 'y2': ['z9', 'z10']}}],
                   'other': '...'
                  })


out = df.join(pd.json_normalize(df.pop('col')))

注意。您可以使用 sep 参数控制级别的连接方式。

输出:

  other     x1.y1         x1.y2         x2.y1      x2.y2
0   ...  [z1, z2]  [z3, z4, z5]  [z6, z7, z8]  [z9, z10]

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 2020-05-10
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2020-09-06
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多