使用Pandas read_json加载单行多列JSON报错,求解决方案
解决单行JSON加载到Pandas DataFrame的报错问题
嘿,这个问题我之前处理过,太典型了!咱们先搞清楚为啥会报错:你调用pd.read_json()加载的是一个纯键值对结构的单行JSON(所有值都是标量,没有数组或嵌套对象),Pandas默认没法直接把这种结构映射成DataFrame——它不知道该把这些键当成行索引还是列名,所以就抛出了ValueError: If using all scalar values, you must pass an index这个错误。
给你几个简单的解决方案,挑你顺手的用就行:
方案1:给read_json指定orient参数并转置
直接在read_json里加上orient='index',告诉Pandas把JSON的键作为行索引,然后用.T转置成我们需要的列结构:
import pandas as pd url_global = 'https://api.coinmarketcap.com/v1/global/' df_global = pd.read_json(url_global, orient='index').T
方案2:先把JSON转成字典,再用列表包裹后生成DataFrame
先通过请求获取JSON字典,然后把这个字典放进一个列表里——这样Pandas就会自动识别这是一行数据,直接生成带列名的DataFrame:
import pandas as pd import requests url_global = 'https://api.coinmarketcap.com/v1/global/' # 先获取JSON数据转成字典 data_dict = requests.get(url_global).json() # 把字典放进列表,生成DataFrame df_global = pd.DataFrame([data_dict])
方案3:手动指定索引(原理参考用)
如果非要用原始的read_json方式,你可以手动给Pandas传一个索引,比如:
import pandas as pd url_global = 'https://api.coinmarketcap.com/v1/global/' df_global = pd.read_json(url_global, index=[0])
不过这个方法不如前两种直观,一般更推荐前两种。
试一下上面的方法,你就能顺利得到7列1行的DataFrame啦!
内容的提问来源于stack exchange,提问作者coding404
相关产品推荐
相关产品推荐

