如何将DataFrame中的嵌套JSON字符串列拆分为多个独立列
解决DataFrame嵌套JSON字符串列拆分报错问题
报错的核心原因是people_info列的单元格存储的是JSON格式字符串,而非Python原生的列表/字典结构,json_normalize无法直接处理字符串类型的输入,按以下步骤操作即可解决:
操作步骤
- 导入依赖库
import pandas as pd import json
- 定义JSON安全转换函数(避免非法格式导致程序中断)
def safe_parse_json(s): try: return json.loads(s) except: # 格式错误的单元格返回空列表兜底 return []
- 将字符串列转换为Python对象列
df["people_info_obj"] = df["people_info"].apply(safe_parse_json)
- 拆分嵌套结构生成新列
场景1:每个单元格仅包含1个嵌套对象(即示例中的单元素数组)
# 提取数组中的第一个字典,空数组返回空字典 df["people_info_obj"] = df["people_info_obj"].apply(lambda x: x[0] if x else {}) # 展开字典为独立列,合并回原DataFrame df = pd.concat([ df.drop(columns=["people_info", "people_info_obj"]), pd.json_normalize(df["people_info_obj"]) ], axis=1)
场景2:部分单元格包含多个嵌套对象(数组内有多条数据)
# 先展开列表为多行 df = df.explode("people_info_obj", ignore_index=True) # 提取字典字段为新列,合并回原DataFrame df = df.join(pd.json_normalize(df["people_info_obj"])).drop(columns=["people_info", "people_info_obj"])
极简写法(确认所有单元格JSON格式合法且为单元素数组时可直接使用)
df = df.join(pd.json_normalize(df["people_info"].apply(json.loads).str[0])).drop(columns="people_info")
内容的提问来源于stack exchange,提问作者Phelipe
相关产品推荐
相关产品推荐

