求助:如何将JSON导出为含多列的CSV格式(含年份列等)
问题解决:将嵌套JSON展开为多列CSV导出
需求说明
使用df.to_csv('codetocsv.csv', index=False)导出JSON数据到CSV时,'series'列被合并为单个列。需要实现:
- 将
command、copyright等字段拆分为独立列 - 把
data中的每个年份设为单独一列 - 兼容JSON中包含多个国家/地区的多组数据
示例JSON结构
{ "request": { "command": "series" }, "series": [ { "f": "A", "copyright": "None", "updated": "2022", "data": [ ["2021", 404.800507146], ["2020", 371.59497253], ["2019", 392.433272519], ["2018", 397.800544326] ] }, { "f": "B", "copyright": "CC BY", "updated": "2023", "data": [ ["2021", 512.3], ["2020", 489.1], ["2019", 501.7] ] } ] }
修改后的代码实现
import pandas as pd import json # 读取JSON数据(如果是从文件读取,用以下方式;如果是已加载的JSON对象,直接使用即可) with open('your_data.json', 'r') as f: json_data = json.load(f) # 提取公共字段:request中的command,作为所有数据行的公共列 command = json_data['request']['command'] processed_rows = [] # 遍历每个series条目(对应不同国家/地区的数据集) for series_item in json_data['series']: # 提取当前条目的基础属性字段 base_info = { 'command': command, 'f': series_item['f'], 'copyright': series_item['copyright'], 'updated': series_item['updated'] } # 将data数组转换为"年份:数值"的字典,直接扩展为列 year_value_dict = dict(series_item['data']) # 合并基础字段和年份字段 processed_row = {**base_info, **year_value_dict} processed_rows.append(processed_row) # 转换为标准结构的DataFrame final_df = pd.DataFrame(processed_rows) # 导出为CSV final_df.to_csv('codetocsv.csv', index=False)
代码说明
- 提取公共字段:从
request中取出command,作为所有数据行的公共列 - 遍历多组数据:每个
series下的对象对应一组独立数据(比如不同国家),逐个处理 - 年份列转换:把
data中的二维数组转为年份作为键、数值作为值的字典,直接扩展为CSV的列 - 合并与导出:合并基础属性和年份数据,生成标准DataFrame后导出CSV
导出后的CSV结构示例
| command | f | copyright | updated | 2021 | 2020 | 2019 | 2018 |
|---|---|---|---|---|---|---|---|
| series | A | None | 2022 | 404.8005 | 371.5950 | 392.4333 | 397.8005 |
| series | B | CC BY | 2023 | 512.3 | 489.1 | 501.7 | NaN |
内容的提问来源于stack exchange,提问作者jantheman
相关产品推荐
相关产品推荐

