我在导入带有pandas的JSON文件时遇到了一些困难。
import pandas as pd
map_index_to_word = pd.read_json('people_wiki_map_index_to_word.json')
这是我得到的错误:
ValueError: If using all scalar values, you must pass an index
文件结构简化如下:
{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}
它来自Coursera上华盛顿大学的机器学习课程。你可以找到文件here。
8条答案
按热度按时间q35jwt9p1#
试试看
该文件只包含值为标量的键值对。您可以使用
ser.to_frame('count')
将其转换为 Dataframe 。你也可以这样做:
现在data是一个字典。你可以像这样将它传递给dataframe构造函数:
qxgroojn2#
你可以像@ayhan提到的那样做,这会给予你一个列基格式
或者,您可以将对象包含在[ ](source)中,如下所示,以给予一种行格式,如果您正在加载多个值并计划为机器学习模型使用矩阵,这将非常方便。
sqxo8psd3#
我认为现在的情况是
被读取为字符串而不是json
其实是
由于字符串是标量,它希望你将其作为JSON加载,你必须将其转换为Dict,这正是其他响应正在做的事情
最好的方法是在字符串上做一个JSON加载,将其转换为一个Dict并加载到Pandas中
ohfgkhjo4#
如pd.read_json期望列表
对于一个特定的键,它返回一个错误
如果使用所有标量值,则必须传递索引。
因此,您可以通过在www.example.com _json中指定'typ' arg来解决此问题pd.read
mkh04yzy5#
对于较新的pandas,0.19.0及更高版本,使用lines参数,将其设置为True。文件将作为每行的json对象读取。
如果修复了我遇到的以下错误,特别是当一些json文件只有一个值时:
djp7away6#
例如cat values.json
您可能会遇到以下错误:如果使用所有标量值,则必须传递索引
Pandas在值中查找列表或字典,类似于catvalues.json
所以试着这样做。
gkn4icbw7#
我把它转换成一个数组来解决这个问题
0kjbasz68#
一个完整的工作示例
首先,我将你发布的数据保存在一个json文件中:
然后,使用method proposed by obiradaniel,可以通过以下代码获得pandas Dataframe :
基本上,使用
lines=True
将json_data
字典的键转换为列名。为此,我将 Dataframe 转置(列名变为索引名),然后重置索引。最后,分配新的列名。使用
orient
参数可以跳过转置步骤。这样,json_data
字典的键将作为索引名称从一开始读取。下面是一个使用该参数的示例:在这两种方式中,得到的 Dataframe 如下:
| | col_1|col_2|
| --------------|--------------|--------------|
| 0|双年展|五二零零四|
| 1|lb915|一一六二九零|
| 二|哈茨基|127647|
| 三|伍德|174106|
| 四|达姆丰克|133206|
| 五|努拉特|153444|
| 六|哈特菲约|164111|
| 七|传教士出身的|二六一七六五|
| 八|年描述|161075|
| 九|理论|五二一六八五|