如何将Pandas DataFrame中混合格式的Datetime列统一为指定格式
处理混合格式日期时间列的解决方案
针对你100万行数据的场景,推荐用Pandas的矢量化操作高效处理,避免循环带来的性能损耗,具体逻辑如下:
核心思路
- 分别用两种目标格式尝试解析
datetimes列,解析失败的行会被标记为NaT(Not a Time) - 将两次解析的结果合并,补全彼此的缺失值
- 把统一后的日期时间序列格式化为
YYYY-MM-DD字符串
代码实现
import pandas as pd # 假设你的DataFrame名为df # 第一步:用两种格式分别解析 format1 = "%Y-%m-%d %H:%M:%S" # 年-月-日 时分秒格式 format2 = "%Y-%d-%m %H:%M:%S" # 年-日-月 时分秒格式 parsed1 = pd.to_datetime(df['datetimes'], format=format1, errors='coerce') parsed2 = pd.to_datetime(df['datetimes'], format=format2, errors='coerce') # 第二步:合并解析结果,补全缺失值 df['datetime_unified'] = parsed1.combine_first(parsed2) # 第三步:格式化为目标字符串格式 df['date_formatted'] = df['datetime_unified'].dt.strftime('%Y-%m-%d') # 可选:如果不需要保留原列和中间列,可直接替换原列 # df['datetimes'] = df['datetime_unified'].dt.strftime('%Y-%m-%d') # df.drop(columns=['datetime_unified'], inplace=True)
关键细节说明
errors='coerce':让解析失败的行返回NaT而非抛出错误,确保两次解析能覆盖所有有效行combine_first():优先取parsed1的有效值,parsed1为NaT的行则用parsed2的值,完美合并两种格式的解析结果- 矢量化操作:整个过程是Pandas批量处理,处理100万行数据的速度远快于逐行循环判断
内容的提问来源于stack exchange,提问作者span_path
相关产品推荐
相关产品推荐

