You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理Pandas DataFrame含嵌套字典列表的列,将x、y转为列名?

解决方案

步骤1:自定义扁平化函数

先写一个函数,把每个单元格里的嵌套字典转换成键为x_y、值为z列表的扁平字典:

def flatten_nested(nested_dict):
    flat_data = {}
    for x_key, y_dict in nested_dict.items():
        for y_key, z_list in y_dict.items():
            flat_data[f"{x_key}_{y_key}"] = z_list
    return flat_data

步骤2:应用函数并合并列

以示例DataFrame为例,先构造测试数据,再将嵌套列展开并与原表合并:

import pandas as pd

# 构造包含8列的示例DataFrame
df = pd.DataFrame({
    'col1': [1, 2],
    'col2': ['a', 'b'],
    'col3': [3, 4],
    'col4': ['c', 'd'],
    'col5': [5, 6],
    'col6': ['e', 'f'],
    'col7': [7, 8],
    'col8': ['g', 'h'],
    'nested_col': [
        {'x1': {'y1': ['z1', 'z2'], 'y2': ['z3', 'z4', 'z5']}, 'x2': {'y1': ['z6', 'z7', 'z8'], 'y2': ['z9', 'z10']}},
        {'x1': {'y1': ['z11', 'z12'], 'y2': ['z13']}, 'x2': {'y1': ['z14'], 'y2': ['z15', 'z16', 'z17']}}
    ]
})

# 将嵌套列展开为新的DataFrame
flattened_df = df['nested_col'].apply(lambda item: pd.Series(flatten_nested(item)))

# 合并原表(移除原嵌套列)与展开后的列
final_df = pd.concat([df.drop('nested_col', axis=1), flattened_df], axis=1)

最终效果

处理后的final_df会保留原8列中的7列,并新增x1_y1、x1_y2、x2_y1、x2_y2列,这些列的单元格内容就是对应的z列表。比如x1_y1列的第一行值为['z1', 'z2'],第二行值为['z11', 'z12'],完全符合需求。

内容的提问来源于stack exchange,提问作者jesspi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:25:29