У меня есть файл 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...
Мой желаемый результат был бы примерно таким:
Что я делаю не так? Или, может быть, что-то не так с моим файлом JSON? Буду благодарен за любую помощь!
Я ожидаю увидеть таблицу с двумя столбцами с именами «id» и «value» и соответствующими данными в каждой строке.
Специально ли df сначала определяется как read_json, а затем после открытия файла перезаписывается как json_normalize?
Я даже не знал, что оператор with обеспечивает цикл, я не уверен, как правильно обрабатывать нормализацию... Честно говоря, я новичок в Python.
@FeelTD Пожалуйста, отредактируйте , чтобы добавить желаемый результат. Для справки: минимальный воспроизводимый пример и Как сделать хорошие воспроизводимые примеры панд
@wjandrea Я добавил таблицу, которая представляет желаемый результат, подойдет?
@FeelTD Да, подойдет. В идеале лучше всего разместить все это целиком или использовать пример входных данных меньшего размера, но структура этих данных проста, поэтому все в порядке.
Нужные данные находятся внутри клавиши 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 Если вы хотите преобразовать его в фрейм данных? Это зависит от того, какой результат вы хотите. Если хотите, вы можете задать новый вопрос, но есть некоторые существующие вопросы, на которые вы могли бы сначала обратить внимание, например Конвертировать глубоко вложенный JSON в фрейм данных Pandas
Поскольку это плоский объект, нет смысла использовать нормализацию. Использование d["values"] вызовет ошибку ключа, если ключ не удастся найти. Использование .get не вернет ничего и вернет пустой df.
with open("values.json") as f:
d = json.load(fp=f)
df = pd.DataFrame(data=d.get("values"))
Почему .get()
? Наверняка вам нужна ошибка, если данных нет, не так ли?
Пожалуйста, объясните, почему это будет работать.
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)
Какой результат вы ожидаете?