不使用json模块读取大型JSON为Pandas DataFrame报错求助
解决Pandas读取墨尔本共享单车JSON文件的报错问题
嘿,我明白你现在的困扰——作为Python和JSON新手,碰到这种报错确实头疼,而且还不能用json模块,更让人挠头。先别慌,咱们一步步来解决这个问题。
首先,你遇到的ValueError: Mixing dicts with non-Series may lead to ambiguous ordering报错,大概率是因为你的JSON文件是JSON Lines格式(也就是每行一个独立的JSON对象),而你用默认的pd.read_json参数去解析,才会出现混合类型的不匹配问题。
为什么之前的方法不行?
- 第一种直接调用
pd.read_json的方式:默认情况下,pandas会把整个文件当成一个完整的JSON对象(比如一个大数组或大字典)来解析,但你的文件是每行一个单独的JSON记录,这种结构不匹配就会触发报错。 - 第二种拼接字符串的方式:你把所有行拼在一起后,得到的是多个JSON对象直接连在一起的字符串,这根本不是合法的JSON格式(合法的数组需要用
[]包裹,对象之间用逗号分隔),所以自然也解析失败。
正确的解决方案(无需json模块)
既然你的文件是JSON Lines格式,只需要给pd.read_json加一个lines=True参数,就能正确识别每行的独立JSON对象了。然后再用json_normalize扁平化数据就行,完整代码如下:
import pandas as pd from pandas.io.json import json_normalize # 关键:添加lines=True参数读取JSON Lines格式的文件 mbs = pd.read_json('Melbourne_bike_share.json', lines=True) # 扁平化嵌套结构 df = json_normalize(mbs) # 查看首行验证结果 print(df.head(1))
补充说明
如果你的pandas版本是1.0.0及以上,json_normalize已经移到pandas的主模块里了,可以直接用pd.json_normalize(mbs)替代from pandas.io.json import json_normalize,效果是完全一致的。
这个方法应该能解决你的问题,之后你就能得到预期的扁平化DataFrame了。
内容的提问来源于stack exchange,提问作者AJ AJ
相关产品推荐
相关产品推荐

