You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:40:31