如何处理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
相关产品推荐
相关产品推荐

