Фильтрация локализованного по времени индекса для часового интервала в кадре данных - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть .csv, например:

,columnA
2019-01-01 00:00:00-05:00,10
2019-01-01 00:05:00-05:00,10
2019-01-01 00:10:00-05:00,11
.
.
.
.
2019-10-31 23:45:00-05:00,10
2019-10-31 23:50:00-05:00,10
2019-10-31 23:55:00-05:00,12

.

pd.read_csv('myfile.csv',index_col=0,parse_dates=True)

Теперь я пытаюсь сохранить только строки с индексом между часами 9:00:00-05: 00–15: 00: 00-05: 00.

Как я могу получить это, зная, что индекс локализован по времени?

Вывод df.index [:10]:

Index([2019-01-01 00:05:00-05:00, 2019-01-01 00:10:00-05:00,
       2019-01-01 00:15:00-05:00, 2019-01-01 00:20:00-05:00,
       2019-01-01 00:25:00-05:00, 2019-01-01 00:30:00-05:00,
       2019-01-01 00:35:00-05:00, 2019-01-01 00:40:00-05:00,
       2019-01-01 00:45:00-05:00, 2019-01-01 00:50:00-05:00],
      dtype='object')

Вывод типа (df.index [0]):

<класс 'datetime.datetime'>

Выводdf.index [0]:

2019-01-01 00: 00: 00-05: 00

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Пример CSV-файла (test.csv)

,columnA
2019-01-01 00:00:00-05:00,10
2019-01-01 00:05:00-05:00,10
2019-01-01 00:10:00-05:00,11
2019-01-01 09:10:00-05:00,21
2019-01-01 09:20:00-05:00,30
2019-10-31 09:10:00-05:00,54
2019-10-31 14:45:00-05:00,10
2019-10-31 14:55:00-05:00,17
2019-10-31 23:45:00-05:00,10
2019-10-31 23:50:00-05:00,10
2019-10-31 23:55:00-05:00,12

Вы можете использовать прямой between_time

df = pd.read_csv('test.csv',index_col=0,parse_dates=True)
df.index = pd.to_datetime(df.index) #if index is not `datetimeindex`, need this step
df.between_time('9:00:00', '15:00:00')

Out[94]:
                           columnA
2019-01-01 09:10:00-05:00       21
2019-01-01 09:20:00-05:00       30
2019-10-31 09:10:00-05:00       54
2019-10-31 14:45:00-05:00       10
2019-10-31 14:55:00-05:00       17

Или:

Использовать DatetimeIndex.indexer_between_time и iloc

df = pd.read_csv('test.csv',index_col=0,parse_dates=True)
df.index = pd.to_datetime(df.index) #if index is not `datetimeindex`, need this step
m = df.index.indexer_between_time('9:00:00', '15:00:00')
df.iloc[m]

Out[93]:
                           columnA
2019-01-01 09:10:00-05:00       21
2019-01-01 09:20:00-05:00       30
2019-10-31 09:10:00-05:00       54
2019-10-31 14:45:00-05:00       10
2019-10-31 14:55:00-05:00       17
0 голосов
/ 08 ноября 2019

Если ваши данные правильно считываются как объект даты и времени с часовым поясом, вы можете добавить дополнительный столбец с часом и просто отфильтровать с часом. Если значением даты и времени является ваш индекс, то сначала вы должны сделать из него столбец:

df = pd.read_csv('myfile.csv',index_col=0,parse_dates=True)
df = df.reset_index(drop=False).rename(columns={'index':'Dates'})
df['datetime'] = df['Dates'].dt.tz_localize(none)
df['hour'] = df['datetime'].dt.hour 
df_filtered = df[(df['hour'] >= 9) & (df['hour'] <= 15)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...