преобразование и сравнение между различными типами даты и времени в Python - PullRequest
0 голосов
/ 29 января 2020

Мне не удалось решить проблему конвертации / сравнения дат и времени со ссылкой на все соответствующие сообщения. например, Сравнение даты и времени в python Я привык к R, пытаясь переместить мой код в Python, и давайте посмотрим правде в глаза, это был кошмар с проблемами сравнения даты и времени в Python. Природный музей уродства.

Прежде всего, я пытаюсь преобразовать несколько столбцов даты в кадре данных (в строковом формате) в datetime.date (да, только тип даты, так как меня интересует только компонент даты)

Самое близкое, к чему я пришел, - это использование функции pd.to_datetime (). который по какой-то причине преобразует данные в datetime64, а не в datetime.datetime или datetime.date

Я не нашел способа напрямую преобразовать строку в datetime.date, почему это важно?

Допустим,

today = date.today()
type(today)
Out[242]: datetime.date

Я хочу сравнить преобразованный столбец даты с переменной сегодня. это легко сделать в R без головной боли. почему это так сложно в Python?

>> data = [
['2020-01-01', '2020-02-01', '2020-03-01', 'A']
,['2019-01-01', '2019-02-01', '2019-03-01', 'B']
,['2018-01-01', '2018-02-01', '2018-03-01', 'C']
,['2017-01-01', '2017-02-01', '2017-03-01', 'D']
]
>> df = pd.DataFrame(data, columns = ['Col1', 'Col2', 'Col3', 'Col4']) 

>> df
Out[249]: 
         Col1        Col2        Col3 Col4
0  2020-01-01  2020-02-01  2020-03-01    A
1  2019-01-01  2019-02-01  2019-03-01    B
2  2018-01-01  2018-02-01  2018-03-01    C
3  2017-01-01  2017-02-01  2017-03-01    D

определить столбцы даты

>> date_cols = ['Col1', 'Col2', 'Col3']

преобразовать столбцы даты из строки в pd.datetime

>> df.loc[:, date_cols] = df.loc[:, date_cols].apply(pd.to_datetime, format = '%Y-%m-%d', errors='coerce')

This преобразует столбцы даты в тип datetime64. Почему тип не datetime? и как я могу преобразовать это в datetime.date? Я попытался сравнить сегодня с этими столбцами даты, и это не работает. это довольно большой набор данных, поэтому я не хочу сравнивать даты в строковом формате. или это лучший способ? Какой самый эффективный способ сравнить компоненты даты друг с другом? Меня особенно интересует тип datetime.date. сравнение datetime64 с datetime.date или datetime.datetime с типом datetime.date.

...