Pandas Сбрасывать строки вне диапазона времени - программирование
Подтвердить что ты не робот

Pandas Сбрасывать строки вне диапазона времени

Я пытаюсь пройти через каждую строку в индексе DataFrame и удалить все строки, которые не находятся между определенным временем.

Я искал решения, но ни один из них не отделяет дату от времени, и все, что я хочу сделать, это сбросить строки, находящиеся за пределами диапазона времени.

4b9b3361

Ответ 1

Вы можете использовать метод indexer_between_time Index.

Например, чтобы включить это время между 9:00 и 18:00 (включительно):

ts.ix[ts.index.indexer_between_time(datetime.time(9), datetime.time(18))]

сделать противоположное и исключить те времена между 18:00 и 9:00 (эксклюзивные):

ts.ix[ts.index.indexer_between_time(datetime.time(18), datetime.time(9),
                                    include_start=False, include_end=False)]

Примечание: indexer_between_time arguments include_start и include_end по умолчанию True, установка include_start - False означает, что datetimes, чья временная часть точно start_time (первый аргумент), в этот случай 6 вечера, не будет включен.

Пример:

In [1]: rng = pd.date_range('1/1/2000', periods=24, freq='H')

In [2]: ts = pd.Series(pd.np.random.randn(len(rng)), index=rng)

In [3]: ts.ix[ts.index.indexer_between_time(datetime.time(10), datetime.time(14))] 
Out[3]: 
2000-01-01 10:00:00    1.312561
2000-01-01 11:00:00   -1.308502
2000-01-01 12:00:00   -0.515339
2000-01-01 13:00:00    1.536540
2000-01-01 14:00:00    0.108617

Примечание: тот же синтаксис (с использованием ix) работает для DataFrame:

In [4]: df = pd.DataFrame(ts)

In [5]: df.ix[df.index.indexer_between_time(datetime.time(10), datetime.time(14))]
Out[5]: 
                            0
2000-01-03 10:00:00  1.312561
2000-01-03 11:00:00 -1.308502
2000-01-03 12:00:00 -0.515339
2000-01-03 13:00:00  1.536540
2000-01-03 14:00:00  0.108617

Ответ 2

Вы также можете сделать:

rng = pd.date_range('1/1/2000', periods=24, freq='H')
ts = pd.Series(pd.np.random.randn(len(rng)), index=rng)
ts.ix[datetime.time(10):datetime.time(14)]
Out[4]: 
2000-01-01 10:00:00   -0.363420
2000-01-01 11:00:00   -0.979251
2000-01-01 12:00:00   -0.896648
2000-01-01 13:00:00   -0.051159
2000-01-01 14:00:00   -0.449192
Freq: H, dtype: float64

DataFrame работает одинаково.