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

如何使用Pandas高效解析两种格式的日期字符串?

多格式日期解析的有效方法

问题原因分析

  1. 多列处理报错:直接对多列调用pd.to_datetime并指定format时,pandas会默认将每一列视为日期的组成部分(如年、月、日字段),而非独立的日期字符串,因此抛出缺少日期组件的错误。
  2. 单列处理报错:出现unconverted data remains: 21说明部分字符串既不匹配%m/%d/%Y也不匹配%m/%d/%y格式,可能存在其他格式或冗余字符。

高效解决方案

1. 单列处理(推荐)

从pandas 1.3.0版本开始,pd.to_datetime支持传入格式列表,会依次尝试解析,无需手动分两次调用:

df["field1"] = pd.to_datetime(df["field1"], format=["%m/%d/%Y", "%m/%d/%y"], errors="coerce")
  • format=["%m/%d/%Y", "%m/%d/%y"]:指定所有可能的日期格式,pandas会按顺序尝试匹配
  • errors="coerce":将无法解析的字符串转为NaT(缺失日期值)

如果数据量较小,也可以让pandas自动推断格式(效率略低,但代码更简洁):

df["field1"] = pd.to_datetime(df["field1"], errors="coerce")

2. 多列处理

需要对每一列单独解析,可通过apply或循环实现:

方法一:使用apply批量处理
df[["field1", "field2"]] = df[["field1", "field2"]].apply(
    lambda col: pd.to_datetime(col, format=["%m/%d/%Y", "%m/%d/%y"], errors="coerce")
)
方法二:循环遍历列
for col_name in ["field1", "field2"]:
    df[col_name] = pd.to_datetime(df[col_name], format=["%m/%d/%Y", "%m/%d/%y"], errors="coerce")

额外提示

如果仍有无法解析的字符串,建议先查看这些异常值的格式:

# 筛选无法解析的行(以field1为例)
invalid_dates = df[pd.to_datetime(df["field1"], format=["%m/%d/%Y", "%m/%d/%y"], errors="coerce").isna()]
print(invalid_dates["field1"].unique())

针对性调整格式列表或清理数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:47:10