如何用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')
解决方案
问题原因分析
- 初始代码使用
orient='values'参数,会让pandas将JSON数据视为纯值数组,不会识别JSON对象的键作为列名,这是数据全部集中在A列的核心原因。 - 后续使用
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
相关产品推荐
相关产品推荐

