Как удалить диапазоны дат в pandas кадре данных - PullRequest
1 голос
/ 12 марта 2020

У меня есть столбец даты с данными за 1 год в pandas кадре данных с гранулярностью 1 минута:

sp.head()
    Open    High    Low Last    Volume  # of Trades OHLC Avg    HLC Avg HL Avg  Delta   HiLodiff    OCdiff  div_Bar_Delta
Date                                                    
2019-06-13 15:30:00 2898.75 2899.25 2896.50 2899.25 1636    862 2898.44 2898.33 2897.88 -146    11.0    -2.0    1.0
2019-06-13 15:31:00 2899.25 2899.75 2897.75 2898.50 630 328 2898.81 2898.67 2898.75 168 8.0 3.0 2.0
2019-06-13 15:32:00 2898.50 2899.00 2896.50 2898.00 1806    562 2898.00 2897.83 2897.75 -162    10.0    2.0 -1.0
2019-06-13 15:33:00 2898.25 2899.25 2897.75 2898.00 818 273 2898.31 2898.33 2898.50 -100    6.0 1.0 -1.0
2019-06-13 15:34:00

Теперь мне нужно удалить определенные дни из столбца «Дата».

Единственный способ, который я нашел без получения ошибки, заключается в следующем:

hd1_from = '2020-02-17 15:30:00'
hd1_till = '2020-02-17 21:59:00'
sp = sp[(sp.index < hd1_from) | (sp.index > hd1_till)]

Но, к сожалению, эта дата остается в столбце
Кроме того, это решение выглядит немного неуклюжим, если я хочу удалить 20-дневный спред в диапазоне дат
Есть предложения, как это сделать правильно?

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вы можете попробовать этот подход, если хотите удалить указанные c даты (при условии, что столбец Date является столбцом index) -

to_delete = ['2020-02-17', '2020-02-18']
sp[~(sp.index.strftime('%Y-%m-%d').isin(to_delete))]
1 голос
/ 12 марта 2020

Вы можете нарезать фрейм данных в диапазоне дат, просто df.loc[startdatetime : enddatetime]. Но вы должны убедиться, что поле даты проиндексировано и отсортировано. Например:

df.loc['2020-02-12 23:49:17': '2020-03-12 23:49:17'])
...