Как правильно преобразовать файл JSON в фрейм данных Pandas?

У меня есть файл JSON под названием «values.json» со следующим содержимым:

{
  "values": [{
    "id": 2,
    "value": "passed"
  }, {
    "id": 41,
    "value": "passed"
  }, {
    "id": 73,
    "value": "passed"
  }, {
    "id": 110,
    "value": "failed"
  }, {
    "id": 122,
    "value": "failed"
  }, {
    "id": 234,
    "value": "passed"
  }, {
    "id": 238,
    "value": "passed"
  }, {
    "id": 345,
    "value": "passed"
  }, {
    "id": 653,
    "value": "passed"
  }, {
    "id": 690,
    "value": "failed"
  }, {
    "id": 5321,
    "value": "passed"
  }, {
    "id": 5322,
    "value": "failed"
  }]
}

Я пытаюсь преобразовать его в фрейм данных с помощью следующего кода:

values_path = "values.json"
df = pd.read_json(values_path)
with open(values_path) as f:
    d = json.load(f)
df = pd.json_normalize(d)
print(df)

Однако я получаю таблицу с одним столбцом и одной строкой:

                                              values
0  [{'id': 2, 'value': 'passed'}, {'id': 41, 'val...

Мой желаемый результат был бы примерно таким:

идентификатор ценить 0 2 прошедший 1 41 прошедший 2 73 прошедший

Что я делаю не так? Или, может быть, что-то не так с моим файлом JSON? Буду благодарен за любую помощь!

Какой результат вы ожидаете?

Hermann12 03.07.2024 20:08

Я ожидаю увидеть таблицу с двумя столбцами с именами «id» и «value» и соответствующими данными в каждой строке.

FeelTD 03.07.2024 20:11

Специально ли df сначала определяется как read_json, а затем после открытия файла перезаписывается как json_normalize?

OCa 03.07.2024 20:33

Я даже не знал, что оператор with обеспечивает цикл, я не уверен, как правильно обрабатывать нормализацию... Честно говоря, я новичок в Python.

FeelTD 03.07.2024 20:40

@wjandrea Я добавил таблицу, которая представляет желаемый результат, подойдет?

FeelTD 03.07.2024 20:50

@FeelTD Да, подойдет. В идеале лучше всего разместить все это целиком или использовать пример входных данных меньшего размера, но структура этих данных проста, поэтому все в порядке.

wjandrea 03.07.2024 20:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
60
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Нужные данные находятся внутри клавиши values, поэтому вам просто нужно их выбрать:

df = pd.json_normalize(d['values'])
      id   value
0      2  passed
1     41  passed
2     73  passed
..   ...     ...
9    690  failed
10  5321  passed
11  5322  failed

[12 rows x 2 columns]

Могу ли я спросить, что мне делать, если у меня есть еще один файл JSON со вложенными ключами? Например

FeelTD 03.07.2024 21:09

@FeelTD Если вы хотите преобразовать его в фрейм данных? Это зависит от того, какой результат вы хотите. Если хотите, вы можете задать новый вопрос, но есть некоторые существующие вопросы, на которые вы могли бы сначала обратить внимание, например Конвертировать глубоко вложенный JSON в фрейм данных Pandas

wjandrea 03.07.2024 21:30

Поскольку это плоский объект, нет смысла использовать нормализацию. Использование d["values"] вызовет ошибку ключа, если ключ не удастся найти. Использование .get не вернет ничего и вернет пустой df.

with open("values.json") as f:
    d = json.load(fp=f)
df = pd.DataFrame(data=d.get("values"))

Почему .get()? Наверняка вам нужна ошибка, если данных нет, не так ли?

wjandrea 03.07.2024 20:54

Пожалуйста, объясните, почему это будет работать.

Blip 04.07.2024 10:07
import pandas as pd
import json

with open("values.json", "r") as f:
    data = json.load(f)
df = pd.json_normalize(data["values"]
print(df)

Другие вопросы по теме