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

多格式datetime列转换失败求助:含AM/PM与24小时制时间

解决混合日期格式转换问题

方法1:用Pandas多格式匹配(1.3.0+版本可用)

Pandas 1.3.0之后支持给pd.to_datetime的format参数传入格式列表,直接覆盖两种目标格式:

import pandas as pd

# 定义两种待匹配的日期格式
date_formats = [
    '%Y-%m-%dT%H:%M:%SZ',  # 对应2023-01-25T20:08:38Z格式
    '%B %d, %Y, %I:%M %p'  # 对应January 25, 2023, 8:08 PM格式
]

# 执行转换,errors='coerce'将无效值转为NaT,方便后续清理
df['column_name'] = pd.to_datetime(df['column_name'], format=date_formats, errors='coerce')

Pandas会自动依次尝试每个格式匹配字符串,成功转换后统一为datetime类型,仅真正无效的日期值会生成NaT。

方法2:低版本Pandas兼容方案

如果你的Pandas版本不支持多格式列表,可分两次转换再合并结果:

# 转换第一种格式,无法匹配的保留NaT
df['temp_fmt1'] = pd.to_datetime(df['column_name'], format='%Y-%m-%dT%H:%M:%SZ', errors='coerce')
# 转换第二种格式
df['temp_fmt2'] = pd.to_datetime(df['column_name'], format='%B %d, %Y, %I:%M %p', errors='coerce')
# 合并两列,优先取第一列的有效值,空缺用第二列补充
df['column_name'] = df['temp_fmt1'].combine_first(df['temp_fmt2'])
# 删除临时辅助列
df.drop(['temp_fmt1', 'temp_fmt2'], axis=1, inplace=True)

后续清理操作

转换完成后,可直接执行以下代码删除包含NaT/NA值的列:

df = df.dropna(axis=1, how='any')

若仅需删除目标日期列存在NaT的行,可使用:

df = df.dropna(subset=['column_name'])

格式参数说明

  • %Y:4位年份,%m:2位月份,%d:2位日期
  • %H:24小时制小时,%I:12小时制小时
  • %M:分钟,%S:秒
  • %B:完整月份名称(如January),%p:AM/PM标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:52:42