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
相关产品推荐
相关产品推荐

