使用pd.read_json转换请求返回JSON为DataFrame时遇ValueError报错求助
解决
ValueError: Invalid file path or buffer object type: <class 'dict'>错误 错误原因
pd.read_json() 仅接受文件路径、JSON格式字符串或文件对象作为输入,而你通过 datos.json() 已经将API响应解析成了Python字典(<class 'dict'>),直接传入就会触发该类型错误。
解决方案
有两种可行的修正方式,优先推荐第一种:
方法1:直接用pd.DataFrame()转换字典
datos.json() 返回的字典结构通常可以直接被 pd.DataFrame() 解析,无需额外序列化步骤,效率更高:
import requests import pandas as pd # 修正URL中fin参数的语法错误(缺失=号) url = 'https://apps.grupoice.com/CenceWeb/data/sen/json/DemandaMW?inicio=20190101&fin=20190131' datos = requests.get(url) print(datos.status_code) datos_json = datos.json() # 直接将字典转换为DataFrame datos_df = pd.DataFrame(datos_json)
方法2:将字典转为JSON字符串后传入pd.read_json()
如果需要保留pd.read_json()的使用,可以通过json.dumps()将字典序列化为JSON字符串:
import requests import pandas as pd import json url = 'https://apps.grupoice.com/CenceWeb/data/sen/json/DemandaMW?inicio=20190101&fin=20190131' datos = requests.get(url) print(datos.status_code) datos_json = datos.json() # 序列化字典为JSON字符串后传入read_json datos_df = pd.read_json(json.dumps(datos_json))
额外提示
原URL中的fin参数存在语法错误(缺少=号,应为fin=20190131),这可能导致API返回无效数据,已在上述代码中修正。
内容的提问来源于stack exchange,提问作者S20
相关产品推荐
相关产品推荐

