如何提取Pandas列中的JSON数据并通过堆叠完成结构化处理?
需求说明
现有如下结构的DataFrame,其中level/income列存储键为等级、值为对应收入的字典,需要将该列拆分为独立的level、income列,同时保留每行对应的id、name关联关系,字典包含多少个键值对,对应id和name就重复匹配多少行。
初始数据构造代码:
import pandas as pd df = pd.DataFrame( { 'id':[112, 130, 200], 'name':['Lara', 'Kasia', 'Rocco'], 'level/income':[{1:400, 2:800}, {1:100}, {1:1000, 2:2000, 3:5000}] } )
简洁实现方案
不需要手动遍历逐行拼接列表,直接用pandas内置的向量化方法即可实现,代码简洁且执行效率更高:
df_processed = ( # 将每个字典转换为(level, income)格式的键值对可迭代对象,存入临时列 df.assign(temp = df['level/income'].map(dict.items)) # 按临时列拆分为多行,自动适配每个字典的键值对数量,重置索引 .explode('temp', ignore_index=True) # 将拆分后的键值对元组拆为两个独立字段 .assign( level = lambda x: x['temp'].str[0], income = lambda x: x['temp'].str[1] ) # 移除原始字典列和临时处理列 .drop(columns=['level/income', 'temp']) )
处理结果
执行代码后得到的最终输出如下:
id name level income 0 112 Lara 1 400 1 112 Lara 2 800 2 130 Kasia 1 100 3 200 Rocco 1 1000 4 200 Rocco 2 2000 5 200 Rocco 3 5000
方案优势
- 无冗余的手动循环、列表追加逻辑,代码可读性强
- 自动适配不同长度的字典,不需要提前计算每个字典的元素个数做行数对齐
- 基于pandas内置向量化逻辑实现,数据量较大时运行速度远高于手写
iterrows遍历的方案
内容的提问来源于stack exchange,提问作者IamWarmduscher
相关产品推荐
相关产品推荐

