将日期时间 ns 转换为每日格式

Convert datetime ns to daily format

我的数据框中有一列采用这种格式:

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

非空 datetime64[ns, UTC]

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

2013-01-25

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

df['date_column'].date()

AttributeError: 'Series' 对象没有属性 'date'

错误信息我不是很清楚,因为根据df.info()

,对象应该是一个日期时间对象

任何人都可以建议如何执行此操作的方法吗?

简而言之:不建议转换为 date 对象,因为那样你会失去很多检查 date 的功能。只 dt.floor(..) [pandas-doc], or 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-like 个对象。所以 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]