Pandas将date类型列转datetime遇ValueError,求解决方法
解决方案
错误原因
你使用的unit='ms'参数,是用来将毫秒级时间戳数字转换为datetime类型的,但你的列是date格式的日期字符串(如0000-12-30),参数与数据类型不匹配,导致转换报错。
正确转换方法
基础场景(无特殊日期)
直接移除unit='ms'参数,pandas会自动识别日期字符串格式完成转换:
SourceTableData["StartDate"] = pd.to_datetime(SourceTableData["StartDate"]) SourceTableData["NextStartDate"] = pd.to_datetime(SourceTableData["NextStartDate"])
含特殊日期的场景(如0000-12-30)
pandas依赖的datetime模块不支持公元0年的日期,若数据中存在这类特殊值,可按以下方式处理:
- 方式1:将无法转换的特殊值转为空时间值
NaT,使用errors='coerce'参数:
SourceTableData["StartDate"] = pd.to_datetime(SourceTableData["StartDate"], errors='coerce') SourceTableData["NextStartDate"] = pd.to_datetime(SourceTableData["NextStartDate"], errors='coerce')
- 方式2:先替换特殊日期为有效日期,再执行转换:
# 示例:将0000-12-30替换为1970-01-01,可根据业务需求调整目标日期 SourceTableData["StartDate"] = SourceTableData["StartDate"].replace('0000-12-30', '1970-01-01') SourceTableData["NextStartDate"] = SourceTableData["NextStartDate"].replace('0000-12-30', '1970-01-01') # 转换为datetime类型 SourceTableData["StartDate"] = pd.to_datetime(SourceTableData["StartDate"]) SourceTableData["NextStartDate"] = pd.to_datetime(SourceTableData["NextStartDate"])
内容的提问来源于stack exchange,提问作者Rohit Kulkarni
相关产品推荐
相关产品推荐

