如何将多种日期格式统一为datetime类型并格式化为dd/mm/yyyy?
解决混合类型日期列的转换与格式化问题
核心逻辑
你的StartDate列混合了带单引号的字符串日期和原生datetime对象,直接调用pd.to_datetime()会因类型不统一导致原生datetime被解析为NaT。我们需要先区分两种类型分别处理,再统一格式。
具体操作步骤
分别解析不同类型的日期值
用apply遍历列内每个元素,根据类型执行不同的解析逻辑:- 字符串类型:先去除首尾的单引号,再转为pandas datetime类型;
- 原生datetime对象:直接转为pandas兼容的datetime类型。
代码示例:
import pandas as pd from datetime import datetime def parse_mixed_dates(val): if isinstance(val, str): # 移除字符串首尾的单引号 clean_date_str = val.strip("'") return pd.to_datetime(clean_date_str, format='%d/%m/%Y') elif isinstance(val, datetime): # 将原生datetime转为pandas datetime类型 return pd.to_datetime(val) else: return pd.NaT df['StartDate'] = df['StartDate'].apply(parse_mixed_dates)格式化为dd/mm/yyyy格式(可选)
如果需要将datetime类型列转换为dd/mm/yyyy格式的字符串,使用dt.strftime()方法:df['StartDate_Formatted'] = df['StartDate'].dt.strftime('%d/%m/%Y')
结果验证
处理后可以通过df['StartDate'].nunique()检查唯一值数量,应该能恢复到611个(或符合预期的数值),且无NaT值残留。
内容的提问来源于stack exchange,提问作者Robin Keij
相关产品推荐
相关产品推荐

