将datetime ns转换为每日格式

时间:2019-07-08 19:44:38

标签: python datetime converters

我的数据框中有一个这样的列:

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

非空datetime64 [ns,UTC]

我想将其转换为每日格式,如下所示:

2013-01-25

我尝试了这种方法,但是一直收到错误消息:

df['date_column'].date()

AttributeError:“系列”对象没有属性“日期”

错误消息对我来说还不太清楚,因为根据df.info(),该对象应该是日期时间对象

有人可以建议一种方法吗?

1 个答案:

答案 0 :(得分:1)

简而言之:建议不要转换为date个对象,因为那样会丢失很多检查date的功能。最好只使用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]

我们随后可以使用.dt.date [pandas-doc]将其转换为date个对象:

>>> 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(..)对象。这样做的缺点是您不能再处理与日期时间类似的对象。因此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]