Python中如何将DataFrame的JSON列展平为新行?
高效展平含嵌套JSON的DataFrame列
针对800万行的大数据集,别用Python循环,直接用pandas的矢量化JSON处理函数,全程避免逐行遍历,效率会提升几个量级,具体步骤如下:
1. 解析JSON字符串(若需要)
如果Reason_details是JSON格式的字符串,先转成Python原生的列表/字典对象:
import json import pandas as pd # 假设原始数据集名为df df['Reason_details'] = df['Reason_details'].apply(json.loads)
2. 展开外层的reason列表
把每个用户的多个reason条目拆成单独行:
df_exploded = df.explode('Reason_details', ignore_index=True)
3. 展平reason字典为独立列
用json_normalize把每个reason的键值对展开成DataFrame列:
df_reasons = pd.json_normalize(df_exploded['Reason_details'])
4. 合并用户信息与展平后的reason列
把用户ID、名称和展开后的reason信息合并:
df_merged = pd.concat( [df_exploded[['UserId', 'UserName']].reset_index(drop=True), df_reasons], axis=1 )
5. 展开reasonCodes列表
把每个reason对应的多个code拆成单独行:
df_final = df_merged.explode('reasonCodes', ignore_index=True)
6. 重命名列匹配期望格式
df_final.rename( columns={ 'reasonId': 'Reason_id', 'reasonDescription': 'Reason_description', 'reasonCodes': 'Reason_codes' }, inplace=True )
效率说明
以上操作全是pandas底层优化的矢量化操作,没有Python层面的逐行循环,处理800万行数据时,速度会比for循环快几十甚至上百倍,内存占用也更可控。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

