如何使用pandas.to_datetime转换两种日期格式列并解决解析错误?
解决Pandas日期列转换问题
针对你提到的两种日期格式,最稳妥的方法是使用pandas.to_datetime()函数,它既支持自动解析常见格式,也能通过指定格式字符串精准匹配,同时可以处理异常数据避免报错。
方法1:自动解析(推荐优先尝试)
pd.to_datetime()自带的解析器通常能识别这两种格式,代码简单直接:
import pandas as pd # 假设你的数据框是df,两列分别为col1(带时间)和col2(仅日期) df['col1'] = pd.to_datetime(df['col1']) df['col2'] = pd.to_datetime(df['col2'])
方法2:指定格式字符串(自动解析失效时用)
如果自动解析出现报错,可以明确指定格式规则,对应你的两种格式:
- 对于
Jan 17, 2023 at 12:22 PM,格式字符串为%b %d, %Y at %I:%M %p - 对于
May 2, 2018,格式字符串为%b %d, %Y
代码示例:
# 处理带时间的列 df['col1'] = pd.to_datetime(df['col1'], format="%b %d, %Y at %I:%M %p") # 处理仅日期的列 df['col2'] = pd.to_datetime(df['col2'], format="%b %d, %Y")
格式字符串说明:
%b:缩写月份(如Jan、May)%d:两位数字的日期(不足两位会自动补零,比如2会识别为02)%Y:四位数字的年份%I:12小时制的小时数%M:分钟数%p:AM/PM标识
解决ParserError: day is out of range for month: 0报错
这个错误说明你的数据中存在无效日期(比如出现了"0号"这种不存在的日期),可以通过errors参数处理:
errors='coerce':将无效日期转为NaT(Pandas的缺失日期标识),后续可以筛选出这些异常行排查errors='ignore':保留原始字符串,不做转换
示例代码:
# 转换时强制处理异常值 df['col1'] = pd.to_datetime(df['col1'], format="%b %d, %Y at %I:%M %p", errors='coerce') # 查看所有无效日期的行 invalid_rows = df[df['col1'].isna()] print(invalid_rows)
内容的提问来源于stack exchange,提问作者Connor95
相关产品推荐
相关产品推荐

