Вложенные словари/массивы. Отображение определенных столбцов в части кадра данных pandas

У меня есть следующий набор данных: набор данных

Вот документация по HTTP-запросу Polygon: https://polygon.io/docs/options/get_v3_snapshot_options__underlyingasset Он отправляет обратно словари словарей, что является источником моей проблемы.

    break_even_price    day details greeks  last_quote  open_interest   underlying_asset
0   30  {'change': 0, 'change_percent': 0, 'close': 96...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   2799    {'change_to_break_even': -100, 'last_updated':...
1   35  {'change': 0, 'change_percent': 0, 'close': 94...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   642 {'change_to_break_even': -95.2, 'last_updated'...
2   40  {'change': 0, 'change_percent': 0, 'close': 89...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   1007    {'change_to_break_even': -90.2, 'last_updated'...
3   50  {'change': 0, 'change_percent': 0, 'close': 79...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   3915    {'change_to_break_even': -80.2, 'last_updated'...
4   55  {'change': 0, 'change_percent': 0, 'close': 75...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   814 {'change_to_break_even': -75.2, 'last_updated'...
5   60  {'change': 0, 'change_percent': 0, 'close': 69...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   2994    {'change_to_break_even': -70.2, 'last_updated'...
6   65  {'change': 0, 'change_percent': 0, 'close': 64...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   1456    {'change_to_break_even': -65.2, 'last_updated'...
7   70  {'change': 0, 'change_percent': 0, 'close': 58...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   3414    {'change_to_break_even': -60.2, 'last_updated'...
8   75  {'change': 0, 'change_percent': 0, 'close': 55...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   1981    {'change_to_break_even': -55.2, 'last_updated'...
9   80  {'change': 0, 'change_percent': 0, 'close': 49...   {'contract_type': 'call', 'exercise_style': 'a...   {}  {'ask': 0, 'ask_size': 0, 'bid': 0, 'bid_size'...   4676    {'change_to_break_even': -50.2, 'last_updated'...

Подчеркнутые красным цветом на изображении (или наборе текстовых данных выше) — это данные, на которых я хотел бы создать фрейм данных; Я хотел бы иметь таблицу с «закрыть» в качестве столбца, а затем n строк с близкими значениями из словаря «день».

Я использую блокнот jupyter и не могу найти способ правильно сформулировать код в python; Любые идеи?

пока вот мой код:

import requests, pandas as pd
optionchain_url = 'https://api.polygon.io/v3/snapshot/options/AAPL?expiration_date=2023-01-20&apiKey=9z9LDShn----Q9sQSj'
optionchain = requests.get(optionchain_url).json()
df = pd.DataFrame(optionchain['results'])
closedf = pd.DataFrame(df, columns='close')

Последний запрос выдает ошибку:

TypeError: Index(...) must be called with a collection of some kind, 'close' was passed

Теоретически я хотел бы сделать следующее:

df = pd.DataFrame(optionchain['results']['day'], columns='close')

Но, конечно, это неправильный синтаксис ^^

(замените apikey на свой, если хотите получить http-запрос)

Большое спасибо!

Почему в 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
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете сначала проанализировать столбец day в df, чтобы получить значение ключа close:

df = pd.DataFrame(optionchain['results'])
df['close'] = [i['close'] for i in df['day']]

Затем создайте новый фрейм данных, используя этот столбец:

closedf = df[['close']]

здорово, работает! Спасибо. может быть, есть более прямой подход с json_normalize() или методом df?

Alex 09.01.2023 16:29

Большой! Если это сработает, не могли бы вы принять мой ответ? Что вы подразумеваете под методом df?

Freda Xin 09.01.2023 16:37

Для json_normalize() вы можете попробовать: pd.json_normalize(optionchain['results'], max_level=1). Это работает, если optionchain['results'] — это список словарей. Больше информации смотрите в pandas doc.

Freda Xin 09.01.2023 16:49

здесь мы перестраиваем список из цикла, который, я бы сказал, является косвенным подходом. Интересно, нет ли более простого способа сделать это с объектом dataframe.

Alex 09.01.2023 16:50

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

Объединение нескольких столбцов включает NaN в фрейме данных
Explode вызывает ошибку значений ValueError: столбцы должны иметь совпадающее количество элементов
Из кадра данных в тело электронной почты автоматически, несколько проблем с форматированием: разделитель тысяч, цвет (красный для отрицательного числа и зеленый для положительного)
Добавить несколько столбцов и значений в фрейм данных pandas
Сравнение двух фреймов данных, чтобы увидеть, находится ли один в диапазоне столбцов другого
Попытка создать потоковое приложение, которое использует предоставленные пользователем URL-адреса для очистки и возврата загружаемого файла df
Можем ли мы вычислить тренд для всех столбцов по группам?
Pandas to_csv создает csv с sep = "|", но read_csv работает только с sep = ","
Чтение нескольких файлов csv в отдельные кадры данных в Python
Отображение даты и времени Python без часов, минут и секунд в Pandas