Pandas 如何将DataFrame中嵌套JSON列拆分为多行并展开字段
实现方法
首先确保details列的内容为Python字典列表格式,如果读入时是JSON字符串,需要先做类型转换:
import pandas as pd import json # 读入csv样例数据 df = pd.read_csv("输入文件路径.csv") # 将details列的JSON字符串转为字典列表 df["details"] = df["details"].apply(json.loads)
如果是自行构造测试DataFrame可以用以下代码:
df = pd.DataFrame({ "cust_id": [101, 102], "name": ["Kevin", "Scott"], "details": [ [{"id":1001,"country":"US","state":"OH"}, {"id":1002,"country":"US","state":"GA"}], [{"id":2001,"country":"US","state":"OH"}, {"id":2002,"country":"US","state":"GA"}] ] })
方法一:explode + json_normalize 两步实现
兼容性更强,适合所有支持explode方法的Pandas版本:
# 将details列的数组按元素拆分为多行 df_exploded = df.explode("details", ignore_index=True) # 展开每行的字典为独立列,和原有列拼接得到最终结果 result = pd.concat( [df_exploded.drop(columns="details"), pd.json_normalize(df_exploded["details"])], axis=1 )
方法二:json_normalize 一步实现(适用于Pandas 1.3及以上版本)
直接指定数组路径和要保留的原有列,代码更简洁:
result = pd.json_normalize( df.to_dict("records"), record_path="details", meta=["cust_id", "name"] )
两种方法最终输出的结果都符合需求,可根据自己的Pandas版本和使用习惯选择。
内容的提问来源于stack exchange,提问作者Kevin Nash
相关产品推荐
相关产品推荐

