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

如何使用pandas将JSON响应拆分为DataFrame的不同列?

Pandas拆分嵌套JSON为独立DataFrame列实现方案

问题背景

  • 目标:将接口返回的带嵌套数组的JSON响应拆分为结构化的DataFrame列,导出为CSV
  • 现有问题:直接用pd.DataFrame()构造数据集时,嵌套的financeInfo数组会被整体存储为单列表格值,无法拆分内部的date、totalReturn字段
  • 样例JSON结构:
{
  "codeId": "fc-5599",
  "financeInfo": [
    {
      "date": "2022-01-30",
      "totalReturn": 0.022425456852
    },
    {
      "date": "2022-01-30",
      "totalReturn": 0.022425456852
    },
    {
      "date": "2022-01-30",
      "totalReturn": 0.022425456852
    },
    {
      "date": "2022-01-30",
      "totalReturn": 0.022425456852
    },
    {
      "date": "2022-01-30",
      "totalReturn": 0.022425456852
    }
  ]
}
  • 原有问题代码:
df = pd.DataFrame(s, columns = ["codeId","financeInfo"])
df.to_csv('data_fin.csv', index=False)
  • 预期输出结构:每条financeInfo内的记录单独成行,保留对应codeId,同时拆分出date、totalReturn两个独立列

最优实现代码

直接使用pandas内置的json_normalize接口处理嵌套JSON,这是官方针对该场景设计的高性能方案,单条/多条JSON记录均兼容:

import pandas as pd

# s为存储JSON响应的变量,支持传入单个JSON对象、多个JSON对象组成的列表
df = pd.json_normalize(
    data=s,
    record_path="financeInfo",  # 指定需要展开的嵌套数组路径
    meta="codeId"  # 指定需要保留的外层非嵌套字段
)[["codeId", "date", "totalReturn"]]  # 调整列顺序匹配预期

df.to_csv('data_fin.csv', index=False)

已有DataFrame的补救方案

如果已经按照原有代码生成了带列表列的DataFrame,可以通过explode展开数组后拆分字典字段,适合临时修正场景,性能低于json_normalize:

# 展开嵌套列表为单独行
df = df.explode("financeInfo", ignore_index=True)
# 拆分字典结构为独立列
df = pd.concat(
    [df.drop(columns="financeInfo"), df["financeInfo"].apply(pd.Series)],
    axis=1
)

注意:当数据量超过10万条时,优先使用json_normalize方案,避免apply(pd.Series)带来的性能损耗。

内容的提问来源于stack exchange,提问作者user8422715

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:51:26