我在使用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。
答案 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提及,这将为您提供列基础格式
或者您可以如下所示将对象括在[](source)中,以提供一种行格式,如果您要加载多个值并计划使用矩阵进行机器学习,该行格式将非常方便型号。
df = pd.DataFrame([data])
答案 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()