使用pd.read_json转换JSON数组列表为DataFrame报错,求高效解法
解决方法:直接用
pd.DataFrame()构造,比read_json更高效 哎,这个坑我踩过!pd.read_json()的设计初衷是处理JSON格式的字符串、文件路径或者文件对象,你直接传Python列表,它会误以为你给的是文件路径,自然就报ValueError了。
不用遍历列表,有两个高效的方法,优先推荐第一种:
方法1:直接用pd.DataFrame()构造(最优解)
因为你的列表里每个元素都是字典,而pandas.DataFrame()可以直接接收这种字典组成的列表作为输入,内部是矢量化处理,性能比遍历强太多:
import pandas as pd # 注意:你的原始JSON数组里用了"foo"=1,这是语法错误,要改成冒号":" my_json = [{"foo": 1}, {"foo": 2}, {"foo": 3}] df = pd.DataFrame(my_json)
运行后就能得到你想要的DataFrame,列名就是foo,行对应各个值。
方法2:先把列表转成JSON字符串再用read_json
如果你非要用pd.read_json()的话,可以借助json.dumps()把Python序列转成JSON格式的字符串,再传给read_json:
import pandas as pd import json my_json = [{"foo": 1}, {"foo": 2}, {"foo": 3}] # 把Python列表转成JSON字符串 json_str = json.dumps(my_json) df = pd.read_json(json_str)
不过这个方法多了一步序列化操作,性能不如方法1,所以除非有特殊需求,不然优先选方法1。
另外提醒一下:你写的{"foo"=1}是错误的JSON语法,正确的键值对应该用冒号:分隔,也就是{"foo": 1},否则不管用哪种方法都会报错哦!
内容的提问来源于stack exchange,提问作者Darren Christopher
相关产品推荐
相关产品推荐

