【发布时间】:2022-02-16 19:49:10
【问题描述】:
我的数据如何存储的示例 df:
df = pd.DataFrame({'DOB': {0: '2003-01-01 00:00:00+00', 1: '2003-01-02 00:00:00+00'}})
我想将该列转换为日期时间,并且只保留年-月-日值。基本上,就像这个问题一样:
Removing the timestamp from a datetime in pandas dataframe
还有这个:
Convert column of date objects in Pandas DataFrame to strings
除了使用这些答案,从已经是日期时间格式的列中提取日期会将列转换为对象格式。这也在 cmets 中进行了讨论,但似乎已转移到不再可用的聊天中。
第一个答案的结果:
[in] pd.to_datetime(df['DOB']).dt.date
[out]
0 2003-01-01
1 2003-01-02
Name: DOB, dtype: object
第二个答案的结果:
[in] pd.to_datetime(df['DOB']).dt.strftime('%Y-%m-%d')
[out]
0 2003-01-01
1 2003-01-02
Name: DOB, dtype: object
如您所见,它不再是日期时间格式,而是一个对象。然后我不能在我的脚本中进一步使用它。
使用 pd.to_datetime 的 format = "%Y-%m-%d 选项也不起作用,因为时间戳仍然存在:
[in] pd.to_datetime(df['DOB'], format = "%Y-%m-%d")
[out]
0 2003-01-01 00:00:00+00:00
1 2003-01-02 00:00:00+00:00
Name: DOB, dtype: datetime64[ns, UTC]
有什么简单的解决方案可以确保列保持日期时间格式,同时只保留日期格式?
【问题讨论】:
-
你想要什么类型的?对象并不意味着任何特定的东西
-
我希望该列采用日期时间格式。就像显示代码的底部一样,但没有时间戳。
-
那
pd.to_datetime(df['DOB']).dt.date有什么问题呢?这会给你一个datetime.date -
它没有给出日期时间,它返回为
dtype: object。这是第一个答案的问题。 -
这只是一个表示,真正的类型是
datetime.date:见here。实际上,您与许多其他类型有相同的东西
标签: python pandas dataframe datetime