Использование ошибки ключа .loc с индексом даты и времени в панд

#pandas #datetime #.loc

Вопрос:

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

 temp
 
 start time CA   end time CA
0   2021-09-20 19:00:00 2021-09-20 19:30:00
1   2021-09-19 16:30:00 2021-09-19 17:00:00
2   2021-09-19 16:30:00 2021-09-19 17:00:00
3   2021-09-17 10:30:00 2021-09-17 10:45:00
4   2021-09-17 10:30:00 2021-09-17 10:45:00
5   2021-09-17 10:30:00 2021-09-17 10:45:00
6   2021-09-17 10:30:00 2021-09-17 10:45:00
7   2021-09-17 10:30:00 2021-09-17 10:45:00
8   2021-09-17 10:30:00 2021-09-17 10:45:00


temp.dtypes
 
 start time CA    datetime64[ns]
end time CA      datetime64[ns]
dtype: object
 
 temp.set_index('start time CA', inplace=True)

temp.loc['2021-09-19']
 
 end time CA
start time CA   
2021-09-19 16:30:00 2021-09-19 17:00:00
2021-09-19 16:30:00 2021-09-19 17:00:00
 

temp.loc[‘2021-09-20’]

 KeyError: 'the label [2021-09-20] is not in the [index]'
 

Ответ №1:

Вам необходимо создать тип даты и pandas.to_datetime времени столбца/индекса, используя функции даты и времени pandas:

 temp['start time CA'] = pd.to_datetime(temp['start time CA'])
temp = temp.set_index('start time CA')
temp.loc['2021-09-19']
 

выход:

                              end time CA
start time CA                           
2021-09-19 16:30:00  2021-09-19 17:00:00
2021-09-19 16:30:00  2021-09-19 17:00:00
 

вывод для temp.loc['2021-09-20'] :

                              end time CA
start time CA                           
2021-09-20 19:00:00  2021-09-20 19:30:00

 

Комментарии:

1. Моя колонка-дата и время. Я показал выходные данные temp.dtypes. Проблема в том, что .loc успешно выполняется для одной даты, а не для другой.

2. @RuthSmith оба работают на меня, какую версию pandas вы используете?

3. Определенно более старая версия (0.20.3). Я работаю на удаленной машине, где я не настраивал среду. Я посмотрю, смогу ли я его обновить.