Как заполнить недостающие 5-минутные интервалы в pandas фрейме данных - PullRequest
0 голосов
/ 16 июня 2020

У меня есть фрейм данных, содержащий торговые данные каждые 5 минут, например

                    open  close
datetime                     
2015-02-02 08:00:00  43.5 NaN

2015-02-02 08:10:00  43.3   0
2015-02-02 08:15:00  43.2   7
2015-02-02 08:20:00   NaN NaN
2015-02-02 08:25:00  43.1   9

2015-02-02 08:35:00  43.0   9
2015-02-02 08:40:00  43.0  11
2015-02-02 08:45:00   NaN NaN
2015-02-02 08:50:00   NaN NaN
2015-02-02 08:55:00   NaN NaN
2015-02-02 09:00:00  43.1   9

, и я хочу заполнить недостающие строки, как на временной метке 08:30:00, только с помощью np.nan, а затем вперед заливка. Я изучал возможность использования функции pd.date_range для расчета индекса за пятиминутный интервал от начальной до конечной даты и просто наивно назначал это индексом моего фрейма данных, но, как я думал, это вызывает ошибку.

Я также посмотрел на этот вопрос, который очень похож на то, что я задаю, но в ответе используется resample. Я не знаю, как это решило проблему OP, потому что вы не можете обрабатывать объект передискретизации как фрейм данных и запрашивать его таким же образом, насколько мне известно.

EDIT: В итоге я нашел способ сделать это. Я создал фрейм данных с теми же столбцами со всем диапазоном дат, который я хочу использовать, date_range, а затем обновил этот фрейм данных со значениями, которые у меня действительно есть из торговых данных, используя update

1 Ответ

0 голосов
/ 17 июня 2020

, чтобы получить что-то из объекта resample, вам необходимо добавить метод диспетчеризации (см. docs ), например:

import numpy as np
import pandas as pd

df = pd.DataFrame({'open': [43.5,43.3,43.2,np.NaN,43.1,43.0,43.0,np.NaN,np.NaN,np.NaN,43.1],
                   'close': [np.NaN,0,7,np.NaN,9,9,11,np.NaN,np.NaN,np.NaN,9]},
                   index = pd.to_datetime(['2015-02-02 08:00:00','2015-02-02 08:10:00','2015-02-02 08:15:00',
                                           '2015-02-02 08:20:00','2015-02-02 08:25:00','2015-02-02 08:35:00',
                                           '2015-02-02 08:40:00','2015-02-02 08:45:00','2015-02-02 08:50:00',
                                           '2015-02-02 08:55:00','2015-02-02 09:00:00']))

df1 = df.resample('5min').mean()
# df1
#                      open  close
# 2015-02-02 08:00:00  43.5    NaN
# 2015-02-02 08:05:00   NaN    NaN
# 2015-02-02 08:10:00  43.3    0.0
# 2015-02-02 08:15:00  43.2    7.0
# 2015-02-02 08:20:00   NaN    NaN
# 2015-02-02 08:25:00  43.1    9.0
# 2015-02-02 08:30:00   NaN    NaN
# 2015-02-02 08:35:00  43.0    9.0
# 2015-02-02 08:40:00  43.0   11.0
# 2015-02-02 08:45:00   NaN    NaN
# 2015-02-02 08:50:00   NaN    NaN
# 2015-02-02 08:55:00   NaN    NaN
# 2015-02-02 09:00:00  43.1    9.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...