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