如何将Pandas DataFrame中的月日对象列转换为日期格式
问题解决:pandas日期转换越界错误
错误原因
pd.to_datetime解析Dec-01时,默认推断为月-日格式,年份自动填充为公元1年(1 CE),而pandas的datetime64[ns]类型仅支持1677-09-21至2262-04-18的日期范围,因此触发越界错误。- 代码存在语法错误:
strftime(%d-%b')缺少开头的单引号,正确写法是strftime('%d-%b')。
解决方案
根据原始数据的实际含义,分两种情况处理:
情况1:Dec-01表示2001年12月(月-年格式)
指定解析格式为%b-%y(月份缩写-两位年份),让pandas正确识别年份:
import pandas as pd # 正确解析为datetime类型 df['column'] = pd.to_datetime(df['column'], format='%b-%y') # 若需要转换为日-月格式的字符串(如01-Dec) df['column'] = df['column'].dt.strftime('%d-%b')
注:%y会将两位年份01默认转换为2001,若需指定其他世纪,可手动调整年份(如df['column'] = df['column'] + pd.DateOffset(years=100))。
情况2:Dec-01表示12月1日(月-日格式)
手动补充年份,避免pandas填充无效的公元1年:
import pandas as pd from datetime import datetime # 方法1:拼接固定年份后解析 df['column'] = pd.to_datetime(df['column'] + '-2024', format='%b-%d-%Y') # 方法2:用default参数指定默认年份(pandas 2.0+支持) df['column'] = pd.to_datetime(df['column'], infer_datetime_format=True, default=datetime(2024, 1, 1)) # 转换为日-月格式字符串 df['column'] = df['column'].dt.strftime('%d-%b')
额外提示
如果不需要将日期转为字符串,仅需保留datetime类型,直接执行pd.to_datetime并指定正确格式即可,无需dt.strftime步骤。
内容的提问来源于stack exchange,提问作者mikestacker487
相关产品推荐
相关产品推荐

