Pandas read_json: "Если вы используете все скалярные значения, вы должны передать индекс"
У меня есть некоторые трудности с импортом файла JSON с pandas.
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}
Это из курса машинного обучения Университета Вашингтона на Курсере. Вы можете найти файл здесь.
Ответы
Ответ 1
Try
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)
Теперь данные являются словарем. Вы можете передать его конструктору dataframe следующим образом:
df = pd.DataFrame({'count': data})
Ответ 2
Я думаю, что происходит то, что данные в
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
Вы можете сделать как @ayhan упоминание, которое даст вам базовый формат столбца
![Method 1]()
Или вы можете заключить объект в [] (источник), как показано ниже, чтобы получить формат строки, который будет удобен, если вы загружаете несколько значений и планируете использовать матрицу для моделей машинного обучения.
df = pd.DataFrame([data])
![Method 2]()