Преобразование даты и времени в ежедневный формат - PullRequest
1 голос
/ 08 июля 2019

У меня есть столбец в моем фрейме данных в этом формате:

2013-01-25 00: 00: 00 + 00: 00

ненулевое значение datetime64 [нс, UTC]

Я хотел бы преобразовать это в ежедневный формат, например так:

2013-01-25

Я попробовал этот подход, но получаю сообщение об ошибке:

df['date_column'].date()

AttributeError: у объекта 'Series' нет атрибута 'date'

Сообщение об ошибке мне не совсем понятно, потому что объект должен быть объектом datetime согласно df.info ()

Может кто-нибудь предложить подход, как это сделать?

1 Ответ

1 голос
/ 08 июля 2019

Короче говоря : не рекомендуется конвертировать в date объекты, так как тогда вы потеряете много функциональности для проверки date s. Может быть лучше просто dt.floor(..) [pandas-doc] или dt.normalize(..) [pandas-doc] .

Вы можете преобразовать последовательность строк с помощью pd.to_datetime(..) [pandas-doc] , например:

>>> pd.to_datetime(pd.Series(['2013-01-25 00:00:00+00:00']))
0   2013-01-25
dtype: datetime64[ns]

Затем мы можем затем преобразовать это в date объекты с .dt.date [pandas-doc] :

>>> pd.to_datetime(pd.Series(['2013-01-25 00:00:00+00:00'])).dt.date
0    2013-01-25
dtype: object

Обратите внимание, что date является , а не нативным типом Numpy, и поэтому он будет использовать объект Python date(..). Недостатком этого является то, что вы больше не можете обрабатывать объекты, подобные объектам типа datetime. Таким образом, Series более или менее теряет большую функциональность.

Возможно, было бы лучше просто dt.floor(..) [pandas-doc] в день и, таким образом, оставить его datetime64[ns] объектом:

>>> pd.to_datetime(pd.Series(['2013-01-25 00:00:00+00:00'])).dt.floor(freq='d')
0   2013-01-25
dtype: datetime64[ns]

Мы также можем использовать dt.normalize(..) [pandas-doc] . Это просто устанавливает компонент времени на 0:00:00 и оставляет часовой пояс без изменений:

>>> pd.to_datetime(pd.Series(['2013-01-25 00:00:00+00:00'])).dt.normalize()
0   2013-01-25
dtype: datetime64[ns]
...