#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я извлек список исторических цен опционов AAPL из функции robin_stocks.get_option_historicals()
RobinHoood . Данные были возвращены в виде словаря списка словарей, как показано ниже.
У меня возникли трудности с преобразованием приведенного ниже объекта (именованного historicalData
) в DataFrame
. Может кто-нибудь, пожалуйста, помогите?
historicalData = {'data_points': [{'begins_at': '2020-10-05T13:30:00Z',
'open_price': '1.430000',
'close_price': '1.430000',
'high_price': '1.430000',
'low_price': '1.430000',
'volume': 0,
'session': 'reg',
'interpolated': False},
{'begins_at': '2020-10-05T13:40:00Z',
'open_price': '1.430000',
'close_price': '1.340000',
'high_price': '1.440000',
'low_price': '1.320000',
'volume': 0,
'session': 'reg',
'interpolated': False}],
'open_time': '0001-01-01T00:00:00Z',
'open_price': '0.000000',
'previous_close_time': '0001-01-01T00:00:00Z',
'previous_close_price': '0.000000',
'interval': '10minute',
'span': 'week',
'bounds': 'regular',
'id': '22b49380-8c50-4c76-8fb1-a4d06058f91e',
'instrument': 'https://api.robinhood.com/options/instruments/22b49380-8c50-4c76-8fb1-a4d06058f91e/'}
Я попробовал приведенный ниже код кода, но это не помогло:
import pandas as pd
df = pd.DataFrame(historicalData)
df
Ответ №1:
Вы не написали, что вам нужны только data_points (как в другом ответе), поэтому я предполагаю, что вы хотите, чтобы весь ваш словарь был преобразован в фрейм данных.
Чтобы сделать это, начните с вашего кода:
df = pd.DataFrame(historicalData)
Он создает фрейм данных, в котором data_points «разбивается» на
последовательные строки, но они все еще являются словарями.
Затем переименуйте столбец open_price в open_price_all:
df.rename(columns={'open_price': 'open_price_all'}, inplace=True)
Причина в том, чтобы избежать дублирования имен столбцов после объединения
, которое должно быть выполнено в ближайшее время (data_points содержат также
атрибут open_price, и я хочу, чтобы соответствующий столбец из data_points
«унаследовал» это имя).
Следующим шагом является создание временного фрейма данных — разделение словарей в data_points на отдельные столбцы:
wrk = df.data_points.apply(pd.Series)
Выведите wrk, чтобы увидеть результат.
И последний шаг — объединить df с wrk и удалить столбец data_points (больше не нужен, поскольку он был разделен на отдельные столбцы):
result = df.join(wrk).drop(columns=['data_points'])
Комментарии:
1. Большое спасибо, это полностью отвечает на мой вопрос. И если на самом деле, шаг с wrk был всем, что я пытался получить.
Ответ №2:
Это довольно легко решить с помощью приведенного ниже. Я поместил фрейм данных в список с помощью понимания списка
import pandas as pd
df_list = [pd.DataFrame(dic.items(), columns=['Parameters', 'Value']) for dic in historicalData['data_points']]
Затем вы могли бы сделать:
df_list[0]
что даст
Parameters Value
0 begins_at 2020-10-05T13:30:00Z
1 open_price 1.430000
2 close_price 1.430000
3 high_price 1.430000
4 low_price 1.430000
5 volume 0
6 session reg
7 interpolated False
Комментарии:
1. Большое спасибо за вашу оперативность, я намерен указать begins_at, open_price, close_price, high_price, volume, session, interpolated и столбцы моего фрейма данных. Приведенный выше код, похоже, этого не делает. Есть ли другой код, который я могу использовать?