Фильтр DateTime в pandas - PullRequest
       4

Фильтр DateTime в pandas

0 голосов
/ 10 марта 2020

У меня есть такой CSV-файл, и это код, который я написал для фильтрации даты

example['date_1'] = pd.to_datetime(example['date_1'])
example['date_2'] = pd.to_datetime(example['date_2'])

example 
date_1        ID      date_2
2015-01-12    111     2016-01-20 08:34:00
2016-01-11    222     2016-12-15 08:34:00
2016-01-11    7770    2016-12-15 08:34:00
2016-01-10    7881    2016-11-17 08:32:00
2016-01-03    90243   2016-04-14 08:35:00
2016-01-03    90354   2016-04-14 08:35:00
2015-01-11    1140303 2015-12-15 08:43:00
2015-01-11    1140414 2015-12-15 08:43:00

example[(example['date_1'] <= '2016-11-01') 
        & (example['date_1'] >= '2015-11-01') 
        & (example['date_2'] <= '2016-12-16') 
        & (example['date_2'] >= '2015-12-15')]
Output:

2016-01-11    222     2016-12-15 08:34:00
2016-01-11    7770    2016-12-15 08:34:00
2016-01-10    7881    2016-11-17 08:32:00
2016-01-03    90243   2016-04-14 08:35:00
2016-01-03    90354   2016-04-14 08:35:00

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

1 Ответ

1 голос
/ 10 марта 2020

Некоторые локали форматируют дату как дд / мм / ГГГГ, в то время как другие используют мм / дд / ГГГГ. По умолчанию pandas использует американский формат мм / дд / ГГГГ, если только он не может вывести альтернативный формат из значений (когда число дня больше 12 ...).

Так что, если вы знаете, что Вы вводите формат даты дд / мм / ГГГГ, вы должны сказать, что это pandas:

example['date_1'] = pd.to_datetime(example['date_1'], dayfirst=True)
example['date_2'] = pd.to_datetime(example['date_2'], dayfirst=True)

Как только pandas имеет столбец Timestamp, он внутренне сохраняет количество наносекунд с 1970-01 -01 00:00, и по умолчанию отображает его в соответствии с ISO-8601, чередуя части, которые равны 0 для столбцов. Части - это полное время, доли секунд или наносекунды.

Вам не должно быть никакого дела, если вы хотите обработать метки времени. Если в конце вы хотите форсировать формат, явно измените столбец на строковое представление:

df['date_1'] = df['date_1'].df.strftime('%d/%m/%Y %H:%M')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...