Как найти индексы в таблице с датами?
У меня есть таблица с датами d:
created_at
0 2020-01-01 18:08:09
1 2020-02-10 23:45:40
2 2020-02-20 09:41:14
3 2020-03-10 13:44:40
Необходимо найти индексы дат, которые больше date_1 и меньше date_2.
import numpy as np
import pandas as pd
import datetime
date_1 = datetime.datetime(2020, 02, 10, hour=0, minute=0, second=0, tzinfo=None)
date_2 = datetime.datetime(2020, 03, 10, hour=0, minute=0, second=0, tzinfo=None)
ind = np.where((d >= date_1) & (d < date_2))[0]
print(ind)
Ожидаемый результат:
[1, 2]
Но появляется ошибка:
TypeError: '>=' not supported between instances of 'str' and 'datetime.datetime'.
Не совсем понятно, нужно ли переводить таблицу дат из str в формат даты?
Ответы (3 шт):
Автор решения: Sergey
→ Ссылка
Как-то так:
from datetime import datetime
import numpy as np
d = np.array([
datetime.strptime('2020-01-01 18:08:09', '%Y-%m-%d %H:%M:%S'),
datetime.strptime('2020-02-10 23:45:40', '%Y-%m-%d %H:%M:%S'),
datetime.strptime('2020-02-20 09:41:14', '%Y-%m-%d %H:%M:%S'),
datetime.strptime('2020-03-10 13:44:40', '%Y-%m-%d %H:%M:%S')
])
date_1 = datetime(2020, 2, 10, hour=0, minute=0, second=0, tzinfo=None)
date_2 = datetime(2020, 3, 10, hour=0, minute=0, second=0, tzinfo=None)
ind = np.where((d >= date_1) & (d < date_2))[0]
print(ind)
[1 2]
Автор решения: CrazyElf
→ Ссылка
Если d это таблица Pandas, то так:
ind = d.loc[(d['created_at'] >= date_1) & (d['created_at'] < date_2)].index
Но вообще да, даты наверное нужно будет перевести через pd.to_datetime.
Автор решения: MaxU
→ Ссылка
Можно воспользоваться методом DataFrame.query:
d['created_at'] = pd.to_datetime(d['created_at'])
idx = d.query('@date_1 < created_at < @date_2').index