Pandas读取CSV文件时dd.mm.yy格式日期解析错误的解决方法
解决Pandas解析
dd.mm.yy日期时的混淆问题 这个问题我之前处理过好多次,Pandas默认的日期解析逻辑确实会在遇到日和月数值都≤12的时候“犯迷糊”,把dd.mm.yy格式的日期搞反。下面给你几个靠谱的解决办法,按场景选就行:
方法1:读取CSV时自定义日期解析函数(最稳妥)
直接强制指定日期格式,让Pandas完全按照你给定的规则解析,不会有猜测空间。适合数据格式严格统一的情况:
import pandas as pd from datetime import datetime # 自定义解析函数,明确遵循dd.mm.yy格式 def parse_ddmmyy(date_str): return datetime.strptime(date_str, '%d.%m.%y') # 读取CSV时指定要解析的列和自定义解析器 df = pd.read_csv('your_data.csv', parse_dates=['你的日期列名'], date_parser=parse_ddmmyy)
这样不管日和月的数值大小,都会把第一个数字当成日,第二个当成月,比如05.01.05会被正确解析为2005-01-05。
方法2:利用dayfirst=True参数(更简洁)
如果你的Pandas版本在1.3.0及以上,可以直接用dayfirst=True参数,告诉Pandas日期字符串里“日在前,月在后”:
df = pd.read_csv('your_data.csv', parse_dates=['你的日期列名'], dayfirst=True)
这个方法更省事,但要注意:如果你的数据里存在格式不统一的日期(比如混了mm.dd.yy),可能还是会出问题,所以优先推荐方法1。
方法3:已读取数据后批量转换日期列
如果已经把CSV读进DataFrame,日期列还是字符串格式,可以用pd.to_datetime来事后转换:
# 方式A:指定格式(速度更快,适合大数据) df['你的日期列名'] = pd.to_datetime(df['你的日期列名'], format='%d.%m.%y') # 方式B:用dayfirst参数 df['你的日期列名'] = pd.to_datetime(df['你的日期列名'], dayfirst=True)
这里提一句:指定format的转换速度会比dayfirst快很多,因为Pandas不需要逐个猜测日期格式,大数据量场景下差异很明显。
额外注意点
关于yy年份的解析:Pandas默认会把00-69映射为2000-2069,70-99映射为1970-1999,如果你的数据有特殊年份规则,可以通过yearfirst参数或者手动处理年份,但绝大多数场景下默认逻辑就够用。
内容的提问来源于stack exchange,提问作者ManKeer
相关产品推荐
相关产品推荐

