如何正确扁平化嵌套数据集,生成带索引后缀的字段?
解决方案:展开嵌套DataFrame为带索引后缀的字段
一、核心思路
针对两种嵌套类型分别处理:
- 列表型嵌套(如
General_officers,每个单元格是包含多个字典的列表):将列表内的每个字典展开为带索引后缀的字段 - 字典型嵌套(如
MAtainance_name_type_work_ty,每个单元格是单个字典):直接展开为一级字段,或按需添加前缀
二、代码实现
基于pandas库的完整处理代码如下:
import pandas as pd # 处理列表型嵌套字段(如General_officers) def flatten_list_col(df, col_name): # 遍历列表内的字典,生成带索引后缀的字段名 expanded = df[col_name].apply(lambda x: pd.Series({ f"{col_name}_{i}_{k}": v for i, d in enumerate(x) for k, v in d.items() })) # 合并展开后的字段并移除原嵌套列 return pd.concat([df.drop(col_name, axis=1), expanded], axis=1) # 处理字典型嵌套字段(如MAtainance_name_type_work_ty) def flatten_dict_col(df, col_name, prefix=None): prefix = prefix or col_name # 展开字典并添加前缀 expanded = pd.json_normalize(df[col_name]).add_prefix(f"{prefix}_") return pd.concat([df.drop(col_name, axis=1), expanded], axis=1) # 分步执行处理(替换为你的实际DataFrame) df = flatten_list_col(df, "General_officers") df = flatten_dict_col(df, "MAtainance_name_type_work_ty") # 查看处理结果 print(df.head())
三、代码说明
flatten_list_col函数:把列表中的每个字典拆解为原字段名_索引_键名格式的字段(比如General_officers_0_Name),自动适配列表内的元素数量flatten_dict_col函数:用pd.json_normalize快速展开字典,给新字段加上原嵌套列名作为前缀,避免字段名冲突- 若存在多层嵌套的复杂结构,可在函数中加入递归逻辑,逐层拆解深层字段
四、注意事项
- 若部分行的嵌套列表为空,展开后对应字段会填充
NaN,可根据业务需求用fillna()统一处理 - 若原字段名包含特殊字符,建议先清理后再执行展开操作,避免后续出现字段名解析错误
内容的提问来源于stack exchange,提问作者Neetesshhr
相关产品推荐
相关产品推荐

