Использование .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. Значит - проблема та же самая.