You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含时分秒的日期列转为datetime类型且保留原始值

日期列转换为datetime类型的解决方法

你的数据列格式示例:

Date
9999-12-31 00:00:00

你尝试用pd.to_datetime()转换时报错,用errors='coerce'会得到NaT,不符合需求;自己写的apply函数也没能把列转为datetime类型。

问题原因

你用的strptime格式串%Y-%m-%d %H:%M:%S.%f是针对带毫秒的日期,但你的数据是%Y-%m-%d %H:%M:%S格式(无毫秒),格式不匹配导致转换异常;另外用apply生成的datetime.datetime对象,pandas不会自动转为datetime64类型。

解决方法

方法一:修正格式串后显式转换

先修正格式匹配问题,再把列转为pandas的datetime类型:

import datetime
import pandas as pd

# 修正格式串,去掉多余的.%f
adr_df['HIS_TS_END'] = adr_df['HIS_TS_END'].apply(
    lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S') if isinstance(x, str) else pd.NaT
)
# 显式转换为pandas datetime类型
adr_df['HIS_TS_END'] = pd.to_datetime(adr_df['HIS_TS_END'], errors='raise')
# 验证类型
print(type(adr_df.iloc[0]['HIS_TS_END']))

方法二:直接用pd.to_datetime指定格式(推荐)

pandas自带的to_datetime支持指定格式,无需手动写apply,效率更高:

import pandas as pd

adr_df['HIS_TS_END'] = pd.to_datetime(adr_df['HIS_TS_END'], format='%Y-%m-%d %H:%M:%S', errors='raise')

指定format参数后,pandas会精准匹配日期格式,直接生成pandas的Timestamp类型(即datetime64类型),不会报错。

如果你的列中同时存在带毫秒和不带毫秒的日期格式,可以省略format参数让pandas自动推断,但指定格式的方式更快更可靠。

内容的提问来源于stack exchange,提问作者Leyla Elkhamlichi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:12:10