python - Pandas,使用 dt.date 或 dt.strftime 从日期时间列中删除时间戳,将列转换为 dtype : object

标签 python pandas dataframe datetime

我的数据存储方式的示例 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

除了使用这些答案之外,从已经是日期时间格式的列中提取日期会将该列转换为对象格式。评论中也对此进行了讨论,但似乎已移至不再可用的聊天中。

第一个答案的结果:

[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]

有什么简单的解决方案可以确保列保持日期时间格式,同时仅保留日期格式?

最佳答案

IMO 这里没有问题:

s = pd.to_datetime(pd.Series(['2021-02-01 00:00:00']))
s
# 0   2021-02-01
# dtype: datetime64[ns]

事实上,显示类型是“object”:

s.dt.date
# 0    2021-02-01
# dtype: object

但这并没有多大意义,类型实际上是datetime.date:

type(s.dt.date[0])
# datetime.date

关于python - Pandas,使用 dt.date 或 dt.strftime 从日期时间列中删除时间戳,将列转换为 dtype : object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71140752/

相关文章:

python - openssl -aes-128-ecb 加密与 python Crypto.Cipher AES 加密不匹配

python - 循环遍历 DF 列以删除包含西类牙语文本的行

python - 如何使用 python2.7.14 在不覆盖 excel 文件中存在的先前数据的情况下使用不同的数据框更新相同的 excel 表?

python - 如何在 Python 中循环遍历字符列表并将其替换为 "_"?

python - 按 Pandas 中的多个标准分组

pandas - 与其他人一样设置低于阈值的 value_counts

python - 缩短字典中键的长度

python - 在 Python 中将小时和分钟转换为总分钟

python - 添加年份作为 timedelta 单位来移动日期的优雅方法 - Pandas

python - 兄弟包导入