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

Pandas日期列格式转换错误,如何按输入格式正确转换?

问题根源分析

你遇到的日期转换错误,核心原因是**dayfirst=True参数用反了**!你的原始日期格式是yyyy-mm-dd(年-月-日),但dayfirst=True会告诉解析器把日期字符串的第一个数字段当成「日」,第二个当成「月」——比如2018-04-06会被错误解析为「2018年6月4日」,这就是前几个日期乱掉的原因。

另外,你自定义函数里的空值判断也有问题:Pandas中的空值是NaN(浮点类型),不是字符串'nan',用x != 'nan'根本无法识别真正的空值,会导致漏判。


最优解决方案:用Pandas内置工具(推荐)

Pandas有专门处理日期的内置方法pd.to_datetime,比自定义函数更高效、更可靠,还能自动处理空值和异常格式:

import pandas as pd

# 第一步:将列转换为Pandas datetime类型,无法解析的内容转为NaT(空日期)
read4['Column Name'] = pd.to_datetime(read4['Column Name'], errors='coerce')

# 第二步:格式化为你需要的yyyy/mm/dd格式(如果要yyyy-mm-dd就改成'%Y-%m-%d')
read4['Column Name'] = read4['Column Name'].dt.strftime('%Y/%m/%d')

# 第三步(可选):把空日期(NaT)替换为空字符串,和你原需求一致
read4['Column Name'] = read4['Column Name'].fillna('')

用这个方法处理你的测试数据,就能得到完全正确的结果:

2018/04/06
2018/04/06
2018/04/09
2018/04/19
2018/04/19
2018/04/17


如果你坚持用自定义函数

如果你一定要保留自定义函数的逻辑,需要做两个修改:

  1. 去掉dayfirst=True,因为原始日期是年-月-日格式,解析器会自动识别
  2. 用pd.isna()正确判断空值,替换原来错误的字符串判断

修改后的代码:

from dateutil.parser import parse
import pandas as pd

def change_date_format(x):
    # 正确判断空值、空字符串、0这些无效值
    if pd.isna(x) or str(x).strip() in ['', '0']:
        return ''
    # 去掉dayfirst=True,让解析器按年-月-日的默认逻辑解析
    return parse(str(x)).strftime('%Y/%m/%d')  # 按需改成'%Y-%m-%d'

read4['Column Name'] = read4['Column Name'].apply(change_date_format)

内容的提问来源于stack exchange,提问作者Piyush S. Wanare

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:14:13