Python 熊猫阅读“json:”;如果使用所有标量值,则必须传递一个索引";

Python 熊猫阅读“json:”;如果使用所有标量值,则必须传递一个索引";,python,json,pandas,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, "shatzk

我在导入带有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}
import json
with open('people_wiki_map_index_to_word.json', 'r') as f:
    data = json.load(f)
df = pd.DataFrame({'count': data})

这是华盛顿大学Coursera的机器学习课程。您可以找到该文件。

试试看

ser = pd.read_json('people_wiki_map_index_to_word.json', typ='series')
该文件仅包含值为标量的键值对。您可以使用
ser.to\u frame('count')
将其转换为数据帧

您也可以这样做:

{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}
import json
with open('people_wiki_map_index_to_word.json', 'r') as f:
    data = json.load(f)
df = pd.DataFrame({'count': data})
现在数据是一本字典。您可以将其传递给数据帧构造函数,如下所示:

{"biennials": 522004, "lb915": 116290, "shatzky": 127647, "woode": 174106, "damfunk": 133206, "nualart": 153444, "hatefillot": 164111, "missionborn": 261765, "yeardescribed": 161075, "theoryhe": 521685}
import json
with open('people_wiki_map_index_to_word.json', 'r') as f:
    data = json.load(f)
df = pd.DataFrame({'count': data})

我认为现在发生的事情是

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)

您可以按照@ayhan的说明操作,这将为您提供一个柱基格式

或者,如果您正在加载多个值并计划将矩阵用于机器学习模型,则可以如下图所示将对象括在[]()中,为您提供一种方便的行格式。

df = pd.DataFrame([data])

例如 cat values.json

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

df = pd.read_json('values.json')
{
name: ["Snow"],
age: ["31"]
}
很可能你最终会这样 错误:如果使用所有标量值,则必须传递索引

Pandas在值中查找列表或字典。差不多 cat values.json

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

df = pd.read_json('values.json')
{
name: ["Snow"],
age: ["31"]
}
所以试着这样做。稍后将转换为html到html()


这更像是一个熊猫问题,而不是一个JSON问题——在任何不涉及熊猫的上下文中,你都不会有这个特定错误,但你可以在不涉及JSON的情况下得到这个特定错误。例如,请参阅,-一个有相同错误的问题,但是没有涉及JSON。看起来你是在学习Emily的ML课程:)它需要一个列表。因此,如果你这样做,这将工作
pd.DataFrame([{“biennials”:522004,“lb915”:116290}])
。感谢您的解释,我已经寻找了一段时间的原因。