如何将DataFrame中JSON字符串展开为带关联键的多行数据?
问题:展开DataFrame中的嵌套列表数据
现有如下包含嵌套字典列表的DataFrame:
Col1 Col2 1 [{'name': 'TypeScript1', 'size': 10}, {'name': 'TypeScript2', 'size': 20}] 2 [{'name': 'TypeScript3', 'size': 30}, {'name': 'TypeScript4', 'size': 40}]
需要将其转换为以Col1作为关联键的多行数据,目标格式如下:
Col1 name size 1 TypeScript1 10 1 TypeScript2 20 2 TypeScript3 30 2 TypeScript4 40
解决方案(Pandas实现)
完全可以实现,以下是两种常用方法:
方法一:结合explode()与json_normalize()
这种方法逻辑清晰,适合处理复杂嵌套结构:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Col1': [1, 2], 'Col2': [ [{'name': 'TypeScript1', 'size': 10}, {'name': 'TypeScript2', 'size': 20}], [{'name': 'TypeScript3', 'size': 30}, {'name': 'TypeScript4', 'size': 40}] ] }) # 1. 展开Col2列的列表数据 df_exploded = df.explode('Col2').reset_index(drop=True) # 2. 将嵌套字典拆分为单独列,再与Col1合并 result = pd.concat([df_exploded['Col1'], pd.json_normalize(df_exploded['Col2'])], axis=1) print(result)
运行输出:
Col1 name size 0 1 TypeScript1 10 1 1 TypeScript2 20 2 2 TypeScript3 30 3 2 TypeScript4 40
方法二:链式写法(简洁版)
如果追求代码简洁,可使用apply结合Series直接拆分:
import pandas as pd df = pd.DataFrame({ 'Col1': [1, 2], 'Col2': [ [{'name': 'TypeScript1', 'size': 10}, {'name': 'TypeScript2', 'size': 20}], [{'name': 'TypeScript3', 'size': 30}, {'name': 'TypeScript4', 'size': 40}] ] }) result = df.explode('Col2').apply(lambda x: pd.Series({**{'Col1': x['Col1']}, **x['Col2']}), axis=1) print(result)
输出结果与方法一一致。
内容的提问来源于stack exchange,提问作者navee pp
相关产品推荐
相关产品推荐

