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

如何用Pandas将JSON键设为CSV文件的列名?

问题:JSON转CSV时无法正确将JSON键设为列名

我通过requests获取API数据后,使用pandas.read_json(orient='values')将数据保存为CSV,结果JSON键未被设为列名,所有数据都集中在A列。随后尝试用pandas.json_normalize(response.json()["value"])得到了包含正确列名的DataFrame(显示101行44列,含pullRequestId等列),但将其保存为CSV后仍不符合预期,请问如何正确将JSON键设为CSV的列名?

初始代码:

import requests
import pandas

api_url = "***"
Headers = { "Authorization" : "***" }
response = requests.get(api_url, headers=Headers)

obj = pandas.read_json(response.text, orient='values')
obj.to_csv('output1.csv')

后续尝试代码:

df = pandas.json_normalize(response.json()["value"])
print(df)
df.to_csv('output1.csv')

解决方案

问题原因分析

  1. 初始代码使用orient='values'参数,会让pandas将JSON数据视为纯值数组,不会识别JSON对象的键作为列名,这是数据全部集中在A列的核心原因。
  2. 后续使用json_normalize已经生成了列名正确的DataFrame,但保存CSV不符合预期,通常是因为默认保存了DataFrame的索引列,导致CSV多出一列无意义的索引,造成格式错位。

修正后的代码

import requests
import pandas as pd

api_url = "***"
headers = { "Authorization" : "***" }
response = requests.get(api_url, headers=headers)

# 解析API返回的JSON数组,生成带正确列名的DataFrame
df = pd.json_normalize(response.json()["value"])

# 保存CSV时禁用索引列,确保列名完全对应JSON键
df.to_csv('output1.csv', index=False)

关键说明

  • pd.json_normalize(response.json()["value"]):正确解析API返回的嵌套JSON数组,将每个对象的键映射为DataFrame的列名,值对应为行数据。
  • to_csv(..., index=False):默认情况下to_csv会把DataFrame的索引作为第一列写入CSV,添加该参数可以移除这一列,让CSV的列结构完全匹配JSON的键值结构。

额外排查点

如果问题仍存在,可做以下检查:

  • 确认API返回的JSON结构稳定,response.json()["value"]确实是包含多个对象的数组。
  • 执行print(df.columns)查看DataFrame的列名是否符合预期,再执行保存操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:17