如何用Python-Pandas将多格式emp_date列转为DD-MM-YYYY格式?
解决多格式日期统一转换为DD-MM-YYYY的问题
现有代码的问题
- 第一段代码指定了固定格式
%d-%m-%Y,无法解析其他格式(如mm/dd/yyyy、带时间戳的记录),直接抛出错误。 - 第二段代码逻辑冗余:先用
pd.to_datetime转成datetime对象,又转成字符串再重新解析,且如果pd.to_datetime返回NaT(无效值),strftime会直接报错。
可行解决方案
下面的步骤可以处理多种日期格式、空值/空格、带时间戳的记录,统一输出DD-MM-YYYY格式:
步骤1:预处理数据(去除空格、转换空字符串)
先清理列中的前后空格,把空字符串转为pandas缺失值,避免解析失败:
import pandas as pd # 读取CSV文件 df = pd.read_csv('your_input.csv') target_col = 'Previous Employment Start Date' # 去除字符串前后空格,空字符串转为pd.NA df[target_col] = df[target_col].str.strip().replace('', pd.NA)
步骤2:自动解析多格式日期
利用pd.to_datetime的自动识别能力,配合errors='coerce'将无效值转为NaT(Not a Time,对应日期类型的缺失值):
# 自动解析所有常见日期格式,无效值转为NaT df['cleaned_datetime'] = pd.to_datetime(df[target_col], errors='coerce')
如果存在日期歧义(比如01-02-2023既可能是dd-mm-yyyy也可能是mm-dd-yyyy),可以按业务规则优先解析:
def parse_with_priority(val): if pd.isna(val): return pd.NaT # 优先尝试dd-mm-yyyy格式 try: return pd.to_datetime(val, format='%d-%m-%Y') except ValueError: # 失败则尝试mm-dd-yyyy格式 try: return pd.to_datetime(val, format='%m-%d-%Y') except ValueError: # 最后自动识别其他格式(如带时间戳的记录) return pd.to_datetime(val, errors='coerce') df['cleaned_datetime'] = df[target_col].apply(parse_with_priority)
步骤3:转换为DD-MM-YYYY格式字符串
将解析后的datetime对象转为指定格式的字符串,同时处理缺失值:
# 转换为DD-MM-YYYY格式,NaT转为空字符串(可根据需求改为保留NaT) df['formatted_date'] = df['cleaned_datetime'].dt.strftime('%d-%m-%Y').fillna('') # 如果需要覆盖原列 # df[target_col] = df['formatted_date']
关键说明
pd.to_datetime默认会尝试解析绝大多数常见日期格式,包括带时间戳的记录(如mm/dd/yyyy HH:MM:SS)。errors='coerce'确保程序不会因无效值崩溃,而是将其标记为缺失值。dt.strftime('%d-%m-%Y')仅对有效datetime对象生效,fillna('')可以将缺失值转为空字符串,方便后续导出或使用。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

