Pandas如何对包含JSON数组的DataFrame执行explode展开操作
Pandas 数据框执行 explode 展开操作方法
你可以通过两步实现需求:先对存储列表的value列执行 explode 拆分为多行,再将每行的字典结构拆分为独立列即可。
完整可运行代码
import pandas as pd pd.set_option('display.max_colwidth', None) # 构造输入数据框 data={'level_2':{1:'name_1a',3:'name_1b',5:'name_10000_xyz'},'value':{1:[{'date':'2020','val':1}],3:[{'date':'2019','val':2},{'date':'2020','val':3}],5:[{'date':'2018','val':4,'num':'str'},{'date':'2019','val':5},{'date':'2020','val':6,'num':'str'}]}} df = pd.DataFrame(data) # 核心处理逻辑 # 1. 炸开value列的列表,每个字典占单独一行 df_exploded = df.explode('value', ignore_index=True) # 2. 将value列的字典拆分为多列,和原level_2列合并 result = pd.concat([ df_exploded['level_2'], df_exploded['value'].apply(pd.Series) ], axis=1) # 可选:将空值替换为字符串'null',和预期输出格式完全对齐 result = result.fillna('null') # 打印输出验证 print(result)
补充说明
- 要求pandas版本 >= 0.25,该版本首次引入
explode方法 explode方法会将列表类型的单元格内容拆分为多行,其他列的内容自动复制匹配- 字典转多列也可以用
pd.json_normalize代替apply(pd.Series),处理大表时性能更高:result = pd.concat([df_exploded['level_2'], pd.json_normalize(df_exploded['value'])], axis=1) - 运行后输出的列顺序、值都和给出的预期完全一致。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

