我的数据框中有一个这样的列:
2013-01-25 00:00:00 + 00:00
非空datetime64 [ns,UTC]
我想将其转换为每日格式,如下所示:
2013-01-25
我尝试了这种方法,但是一直收到错误消息:
df['date_column'].date()
AttributeError:“系列”对象没有属性“日期”
错误消息对我来说还不太清楚,因为根据df.info(),该对象应该是日期时间对象
有人可以建议一种方法吗?
答案 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]