将JSON导入Pandas DataFrame时部分数据丢失的问题排查
问题原因
你当前的record_path只指定了['gameList'],只会把每个游戏会话(带startingTime和inputType的条目)拆成一行,但每个会话里的Rounds是嵌套列表,Pandas会把它存成单元格里的列表对象,导出CSV时这种嵌套结构会丢失信息,所以多个回合的数据没显示出来。
解决方法
需要两层嵌套展开:先定位到gameList,再把每个gameList下的Rounds作为子记录展开,同时保留上层的startingTime和inputType作为元数据。
修改后的代码如下:
import json import pandas as pd with open('/Users/me/Downloads/databackup.json', 'r') as f: data = json.load(f) # 直接用json.load更简洁 # 关键:record_path指定嵌套的Rounds,meta指定上层要保留的字段 multiple_level_data = pd.json_normalize( data, record_path=['gameList', 'Rounds'], # 先到gameList,再展开里面的Rounds meta=[ ['gameList', 'startingTime'], ['gameList', 'inputType'] ], meta_prefix='session_', # 给上层字段加前缀区分 record_prefix='round_' # 给回合字段加前缀 ) multiple_level_data.to_csv('GameData.csv', index=False) df = pd.read_csv("GameData.csv") print(df)
效果说明
运行后每个回合会单独占一行,同时保留对应的会话时间戳和输入类型:
session_gameList.startingTime:对应原数据的startingTimesession_gameList.inputType:对应原数据的inputTyperound_durationSeconds、round_score:每个回合的时长和分数round_platformCount.normalPlatforms等:嵌套的平台/敌人统计数据也会被自动展开成单独列
这样所有回合的数据都能完整保存到CSV和DataFrame里,不会丢失。
内容的提问来源于stack exchange,提问作者Peter Lustig
相关产品推荐
相关产品推荐

