You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中将不同格式字符串日期转为指定格式

解决方案

问题分析

你之前的代码无效是因为指定的format='%Y-%m-%d'和实际日期格式完全不匹配,导致pd.to_datetime转换失败返回NaT,后续fillna又把原字符串填回了列中,所以没有任何变化。

分步处理两种日期格式

我们需要区分纯数字格式(如23309)和字母缩写格式(如23MAR),分别处理后合并结果:

  1. 导入依赖库
import pandas as pd
from pandas.tseries.offsets import MonthEnd
  1. 处理纯数字日期
    对于23309这类格式,前两位是年份(23→2023),第三位是月份(3→03),最后两位是日期(09),用%y%m%d格式解析:
numeric_dates = pd.to_datetime(df['Date'], format='%y%m%d', errors='coerce')
  1. 处理字母缩写日期
    对于23MAR这类格式,前两位是年份,后三位是月份缩写,先解析为当月第一天,再通过MonthEnd偏移量获取当月最后一天:
alpha_dates = pd.to_datetime(df['Date'], format='%y%b', errors='coerce') + MonthEnd(1)
  1. 合并结果
    用combine_first优先取纯数字解析的结果,若为NaT则取字母格式解析的结果:
df['Date'] = numeric_dates.combine_first(alpha_dates)
  1. 转换为字符串格式(可选)
    如果需要将datetime类型转为yyyy-mm-dd格式的字符串,添加以下代码:
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d')

示例验证

假设输入DataFrame为:

df = pd.DataFrame({'Date': ['23MAR', '23309', '24JAN', '24115']})

处理后df['Date']的结果为:

0   2023-03-31
1   2023-03-09
2   2024-01-31
3   2024-01-15
Name: Date, dtype: datetime64[ns]

如果执行了字符串转换步骤,则结果为字符串类型的对应日期。

内容的提问来源于stack exchange,提问作者Thomas Amal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:28:16