У меня есть dataframe df ['Latest date'], как показано ниже
45 01.12.2015 - 13:35:23
46 01.12.2015 - 13:36:27
...
4355 09.07.2018 - 07:54:22
4356 09.07.2018 - 07:52:03
4357 24.07.2018 - 16:00:36
4358 09.07.2018 - 07:53:19
4359 09.07.2018 - 11:40:22
4369 23.07.2018 - 09:13:34
4370 16.07.2018 - 13:02:28
4371 23.07.2018 - 09:14:13
4372 23.07.2018 - 09:14:44
4374 23.07.2018 - 09:15:35
4378 23.07.2018 - 09:15:58
4379 23.07.2018 - 09:16:24
4380 23.07.2018 - 09:16:41
4381 23.07.2018 - 09:17:16
4383 23.07.2018 - 09:17:53
4387 23.07.2018 - 09:18:28
4389 23.07.2018 - 09:19:25
4393 23.07.2018 - 09:20:08
4394 25.07.2018 - 14:25:20
4395 18.07.2018 - 10:10:58
4396 18.07.2018 - 10:10:18
4398 18.07.2018 - 10:10:42
4399 16.07.2018 - 11:09:21
4400 16.07.2018 - 11:27:23
4401 23.07.2018 - 09:21:16
4407 18.07.2018 - 10:11:15
4417 24.07.2018 - 11:56:14
4418 25.07.2018 - 11:05:11
Я хочу фильтровать строки с датой> 22/07/2018
Я попробовал df=df[(df["Latest date"]>"22/07/2018")]
однако новый df возвращает записи не обязательно после 22/07/2018. Интересно, не понимают ли даты в форматах "dd/mm/yy".
Вам нужны первый разбора дата в datetimes
по to_datetime
с параметром format
, см также http://strftime.org/, если иное форматирование:
df["Latest date"] = pd.to_datetime(df["Latest date"], format='%d.%m.%Y - %H:%M:%S')
#slowier solution without defined format
#df["Latest date"] = pd.to_datetime(df["Latest date"])
print (df["Latest date"].dtype)
datetime64[ns]
[30000 rows x 1 columns]
df = pd.concat([df] * 1000, ignore_index=True)
In [204]: %timeit df["Latest date1"] = pd.to_datetime(df["Latest date"], format='%d.%m.%Y - %H:%M:%S')
163 ms ± 3.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [205]: %timeit df["Latest date2"] = pd.to_datetime(df["Latest date"])
5.09 s ± 55.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Так что теперь возможна фильтрация:
df=df[(df["Latest date"]>"22/07/2018")]
print (df)
Latest date
4357 2018-07-24 16:00:36
4369 2018-07-23 09:13:34
4371 2018-07-23 09:14:13
4372 2018-07-23 09:14:44
4374 2018-07-23 09:15:35
4378 2018-07-23 09:15:58
4379 2018-07-23 09:16:24
4380 2018-07-23 09:16:41
4381 2018-07-23 09:17:16
4383 2018-07-23 09:17:53
4387 2018-07-23 09:18:28
4389 2018-07-23 09:19:25
4393 2018-07-23 09:20:08
4394 2018-07-25 14:25:20
4401 2018-07-23 09:21:16
4417 2018-07-24 11:56:14
4418 2018-07-25 11:05:11
РЕДАКТИРОВАТЬ:
Другое возможное решение, если входные данные в csv
- использовать параметр parse_dates
по положению столбца или по имени столбца:
df = pd.read_csv(file, parse_dates=['Latest date'])
#e.g. third column, pandas counts from 0
#df = pd.read_csv(file, parse_dates=[2])
date
, а не строку. Прямо сейчас вы выполняете порядковые сравнения, так что это означает, что23/06/1984
видится больше.