Использование .loc для datetime with time zone

Есть DataFrame:

                                   time  power
0      2019-12-12 22:00:00.425000+00:00  224.6
1      2019-12-12 22:00:01.409000+00:00  226.1
2      2019-12-12 22:00:02.428000+00:00  220.8
3      2019-12-12 22:00:03.408000+00:00  223.8
4      2019-12-12 22:00:04.409000+00:00  227.8
...                                 ...    ...
258378 2019-12-15 21:59:54.028000+00:00  230.5
258379 2019-12-15 21:59:55.050000+00:00  231.1
258380 2019-12-15 21:59:56.045000+00:00  230.9
258381 2019-12-15 21:59:57.068000+00:00  228.5
258382 2019-12-15 21:59:58.049000+00:00  228.5

#   Column  Non-Null Count   Dtype              
---  ------  --------------   -----              
 0   time    258383 non-null  datetime64[ns, UTC]
 1   power   258383 non-null  float64       

Пытаюсь выполнить выборку на 2019-12-12:

df1.loc['2019-12-12'] 

или

df1['time'].loc['2019-12-12']

Получаю:

KeyError: '2019-12-12'

Подскажите, что делаю не так?


Ответы (2 шт):

Автор решения: MaxU

Пример:

In [27]: df.query("'2019-12-12 22:00:02+00:00' < time < '2019-12-13 00:00:00+00:00'")
Out[27]:
                              time  power
2 2019-12-12 22:00:02.428000+00:00  220.8
3 2019-12-12 22:00:03.408000+00:00  223.8
4 2019-12-12 22:00:04.409000+00:00  227.8

или так:

In [28]: df.loc[('2019-12-12 22:00:02+00:00' < df["time"]) & (df["time"] < '2019-12-13 00:00:00+00:00')]
Out[28]:
                              time  power
2 2019-12-12 22:00:02.428000+00:00  220.8
3 2019-12-12 22:00:03.408000+00:00  223.8
4 2019-12-12 22:00:04.409000+00:00  227.8
→ Ссылка
Автор решения: MarianD
df1.loc['2019-12-12']

Ваш индекс не состоит из значений дата-время типа datetime64 в столбце "time", но из значений 0, 1, 2, ..., 258382 типа int64. Потому нельзя использовать это значение в качестве loc.

Когда бы вы сделали из столбца "time" индекс, напримерь так:

df1.set_index("time", inplace=True)

то ваша команда df1.loc['2019-12-12'] работала бы правильно.


df1['time'].loc['2019-12-12']

df1['time'] - это серия, опять с индексом со значениями 0, 1, 2, ..., 258382 из вашего DataFrame df1. Значит - проблема та же самая.

→ Ссылка