Pandas转换JSON为CSV时数据全存入单个单元格问题求解
问题原因
你现有的代码直接调用pd.read_json读取多层嵌套的GraphQL返回结果时,pandas只会识别最外层的data作为列名,不会自动展开深层嵌套的实体列表,所以会出现整段数据聚合在同一单元格的问题。
修复后的代码
import pandas as pd import json def json_to_csv(csv_path, json_path): # 加载JSON文件为Python字典 with open(json_path, encoding='utf-8-sig') as j_input: json_data = json.load(j_input) # 提取实体列表:自动取data下第一个查询结果的entities数组,无需硬编码查询名 query_result = list(json_data['data'].values())[0] entities = query_result['entities'] # 直接用实体列表生成DataFrame,pandas会自动把对象的key作为表头 df = pd.DataFrame(entities) # 如果实体存在嵌套字段,可替换上一行为下面这行自动展开嵌套结构,嵌套key会用点拼接为表头 # df = pd.json_normalize(entities) # 导出CSV df.to_csv(csv_path, encoding='utf-8', index=False, lineterminator='\n')
效果说明
- 表头会自动匹配实体对象的所有字段,不需要手动硬编码,查询字段变更后代码无需调整
- 示例数据导出后的CSV内容如下:
id,created_at,updated_at 1,2021-05-06T15:35:49+00:00,2021-11-09T15:52:02+00:00 2,2021-05-08T01:51:54+00:00,2021-10-20T15:53:42+00:00 3,2021-05-10T15:53:01+00:00,2021-10-27T17:15:41+00:00 4,2021-05-11T13:25:02+00:00,2021-11-09T15:35:44+00:00 5,2021-05-11T13:42:24+00:00,2021-11-09T15:39:50+00:00
内容的提问来源于stack exchange,提问作者OmegaNine
相关产品推荐
相关产品推荐

