pandas将JSON转为DataFrame时不同场景报错问题求解
问题原因
- 直接触发报错的原因是多余操作:
pd.read_json()执行后已经返回了DataFrame类型结果,你额外将其传入pd.DataFrame()做二次转换,触发了pandas的结构校验规则导致报错。 - 即使去掉二次转换,直接执行
pd.read_json('sample2.json')也无法得到和场景1一致的结果:因为pd.read_json的默认解析逻辑和json.loads后转DataFrame的逻辑不同,遇到JSON对象内同时存在标量值和数组值时,pd.read_json不会自动将标量值广播为和数组长度一致的多行,会直接报结构不匹配错误,或者生成不符合预期的宽表结构。
解决方法
方案1:和场景1逻辑统一(入门优先选,不易出错)
用Python内置json模块读取文件,和你处理JSON字符串的逻辑完全对齐,避免pandas默认解析规则的差异:
import json import pandas as pd # 读取本地JSON文件 with open("sample2.json", "r", encoding="utf-8") as f: json_data = json.load(f) # 转DataFrame,逻辑和场景1完全一致 df = pd.DataFrame(json_data) print(df)
方案2:调整pd.read_json的使用方式
如果要直接用pandas读取,首先去掉多余的二次转换即可正常返回结果。
如果你的JSON文件是每行一条独立JSON记录的JSON Lines格式,额外加lines=True参数即可:
import pandas as pd df = pd.read_json("sample2.json", lines=True)
内容的提问来源于stack exchange,提问作者binayak choudhary
相关产品推荐
相关产品推荐

