使用pandas加载JSON数据集时特征列异常,无法按county_code分行如何处理?
问题根因
你调用pd.DataFrame.from_dict时指定了orient='index'参数,该参数会把JSON解析得到的字典的顶层键作为行索引,键对应的每个值拆分为不同列,和你预期的「顶层键为列名、每条数据为一行」的结构刚好倒置,所以得到的输出不符合要求。
解决方案
首先确认你的JSON结构属于下列两种常见情况之一,对应修改代码即可:
情况1:JSON顶层键为字段名,每个键对应的值是该字段所有行的取值数组
这是公开数据集最常见的JSON存储结构,直接省略orient参数,用默认规则构造DataFrame即可:
import pandas as pd import json file = "/Users/mickelborg/Desktop/Dataset/2018/Carbon_Minoxide_(CO)_2018.json" with open(file, 'r') as j: contents = json.loads(j.read()) # 默认orient='columns'会把字典键作为列名,对应值数组的每一位作为行 oxide = pd.DataFrame(contents) oxide
情况2:JSON顶层键为数据的唯一标识,每个键对应的值是单条数据的完整字段字典
这种结构需要先把字典的值提取为列表再构造DataFrame:
import pandas as pd import json file = "/Users/mickelborg/Desktop/Dataset/2018/Carbon_Minoxide_(CO)_2018.json" with open(file, 'r') as j: contents = json.loads(j.read()) oxide = pd.DataFrame(list(contents.values())) # 若需要保留原顶层键作为数据列,可额外添加一行 # oxide['data_id'] = contents.keys() oxide
内容的提问来源于stack exchange,提问作者MuchoFunk
相关产品推荐
相关产品推荐

