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

Python pandas使用pd.to_datetime转换日期列全为NaT问题求助

全为NaT的核心原因是你指定的日期格式和Date列的实际字符串格式不匹配,按以下步骤排查修改即可:

第一步:确认Date列的实际格式

先运行代码输出前10条Date列的原始内容,确认实际格式:

print(Tonnage1["Date"].head(10))

常见格式不匹配场景:

  • 年份位数不匹配:你代码中交替使用了%y(适配2位年份,如23代表2023)和%Y(适配4位年份,如2023),和实际内容不符就会转换失败
  • 分隔符不匹配:实际日期用/分隔而非你指定的-
  • 顺序不匹配:实际是年-月-日顺序,而非你指定的日-月-年
  • 时间部分缺失:实际只有日期内容,没有你指定的时分秒部分

第二步:修改转换代码

如果不确定具体格式,先去掉format参数让pandas自动推断,先跑通再优化性能:

# 自动推断格式转换,减去7小时30分
Tonnage1["PDN Date"] = pd.to_datetime(Tonnage1["Date"], errors='coerce') - pd.Timedelta(hours=7, minutes=30)

拿到第一步打印的实际格式后,再对应修改format参数即可,比如实际格式为年/月/日 时:分就写成format='%Y/%m/%d %H:%M'。

第三步:排查Excel读取逻辑

如果你的原始Excel没有表头、第一行就是业务数据,需要在读文件时指定header=None,否则会把第一行数据识别为列名,导致后续Date列内容全部错位:

# 读文件时添加header=None参数适配无表头的文件
df=pd.read_excel(file,index_col=False, header=None)

第四步:验证转换结果

转换后可统计空值占比,确认仅异常值被转为NaT:

# 统计NaT占比
nat_ratio = Tonnage1["PDN Date"].isna().mean()
print(f"PDN Date列空值占比:{nat_ratio:.2%}")
# 输出转换失败的原始值示例
print("转换失败的原始值:", Tonnage1[Tonnage1["PDN Date"].isna()]["Date"].head(10))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:09:01