pandas read_json:“如果使用所有标量值,则必须传递索引”

时间:2016-07-14 17:41:11

标签: python json pandas

我在使用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

4 个答案:

答案 0 :(得分:21)

尝试

ser = pd.read_json('people_wiki_map_index_to_word.json', typ='series')

该文件仅包含值为标量的键值对。您可以使用ser.to_frame('count')将其转换为数据框。

您也可以这样做:

import json
with open('people_wiki_map_index_to_word.json', 'r') as f:
    data = json.load(f)

现在数据是一本字典。您可以将它传递给数据帧构造函数,如下所示:

df = pd.DataFrame({'count': data})

答案 1 :(得分:2)

您可以做为@ayhan提及,这将为您提供列基础格式

Method 1

或者您可以如下所示将对象括在[](source)中,以提供一种行格式,如果您要加载多个值并计划使用矩阵进行机器学习,该行格式将非常方便型号。

df = pd.DataFrame([data])

Method 2

答案 2 :(得分:0)

我认为正在发生的是

中的数据
map_index_to_word = pd.read_json('people_wiki_map_index_to_word.json')

被读作字符串而不是json

{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}

实际上是

'{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}'

由于字符串是标量,它希望您将其作为json加载,您必须将其转换为dict,这正是其他响应所做的

最好的方法是对字符串执行json加载,将其转换为dict并将其加载到pandas中

myfile=f.read()
jsonData=json.loads(myfile)
df=pd.DataFrame(data)

答案 3 :(得分:0)

例如 cat values.json

{
name: "Snow",
age: "31"
}

df = pd.read_json('values.json')

很可能你最终会得到这个 错误:如果使用所有标量值,则必须传递索引

Pandas 在值中查找列表或字典。就像是 cat values.json

{
name: ["Snow"],
age: ["31"]
}

所以尝试这样做。稍后转换为 html tohtml()

df = pd.DataFrame([pd.read_json(report_file,  typ='series')])
result = df.to_html()