Python处理pandas数据框两种混合日期格式并统一为DD/MM/YYYY的问题
多格式日期列统一解析解决方案
问题根因
你当前代码报错的核心原因有两个:
- 仅将日期中的空格替换为
/,没有处理原数据中存在的-分隔符,导致类似2021-10-08 00:00:00格式的日期处理后变成2021-10-08/00:00:00,分隔符不统一无法匹配指定格式 - 仅指定了单一的
%d/%m/%Y/%H:%M解析规则,遇到YYYY/MM/DD HH:MM格式的日期时无法匹配
解决方法
步骤1:统一日期分隔符
先把所有日期中的-和空格都统一替换为/,避免分隔符混乱:
# 同时替换横杠和空格为斜杠,正则匹配一次处理完成 df['Appointment Date'] = df['Appointment Date'].str.replace(r'[- ]', '/', regex=True) df['Attended Date'] = df['Attended Date'].str.replace(r'[- ]', '/', regex=True)
步骤2:多格式兼容解析
提供两种实现方案,可根据需求选择:
方案1:自动推断格式(适合大部分场景,代码更简洁)
利用pandas内置的日期推断能力,同时指定dayfirst=True优先匹配日/月/年的格式,避免月和日识别颠倒:
df['Appointment Date'] = pd.to_datetime(df['Appointment Date'], dayfirst=True, infer_datetime_format=True).dt.strftime('%d/%m/%Y') df['Attended Date'] = pd.to_datetime(df['Attended Date'], dayfirst=True, infer_datetime_format=True).dt.strftime('%d/%m/%Y')
方案2:显式兜底解析(适合对准确性要求极高的场景,无推断误差)
自定义解析函数,按优先级尝试两种格式的解析,完全避免自动推断可能出现的识别错误:
def parse_custom_date(date_str): # 优先匹配DD/MM/YYYY/HH:MM格式 try: return pd.to_datetime(date_str, format="%d/%m/%Y/%H:%M") except ValueError: # 匹配失败后尝试YYYY/MM/DD/HH:MM格式 return pd.to_datetime(date_str, format="%Y/%m/%d/%H:%M") # 应用到两个日期列 df['Appointment Date'] = df['Appointment Date'].apply(parse_custom_date).dt.strftime('%d/%m/%Y') df['Attended Date'] = df['Attended Date'].apply(parse_custom_date).dt.strftime('%d/%m/%Y')
内容的提问来源于stack exchange,提问作者Mizanur Choudhury
相关产品推荐
相关产品推荐

