У меня есть следующий набор данных: набор данных
Вот документация по 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-запрос)
Большое спасибо!
Вы можете сначала проанализировать столбец day
в df, чтобы получить значение ключа close
:
df = pd.DataFrame(optionchain['results'])
df['close'] = [i['close'] for i in df['day']]
Затем создайте новый фрейм данных, используя этот столбец:
closedf = df[['close']]
Большой! Если это сработает, не могли бы вы принять мой ответ? Что вы подразумеваете под методом df?
Для json_normalize()
вы можете попробовать: pd.json_normalize(optionchain['results'], max_level=1)
. Это работает, если optionchain['results']
— это список словарей. Больше информации смотрите в pandas doc.
здесь мы перестраиваем список из цикла, который, я бы сказал, является косвенным подходом. Интересно, нет ли более простого способа сделать это с объектом dataframe.
здорово, работает! Спасибо. может быть, есть более прямой подход с json_normalize() или методом df?