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

Pandas时间格式转换报错:time data '0'不匹配格式,为何需coerce?

日期转换ValueError问题分析与解决

问题背景

在将DataFrame日期列转换为datetime类型时,触发错误:ValueError: time data '0' does not match format '%d.%m.%Y %H:%M' (match)(或对应%d.%m.%Y格式的同类错误)。

测试DataFrame片段如下:

Date      DateCP   Time    kWh                DT
0   01.11.2022  01.11.2022  01:00  0.693  01.11.2022 01:00
1   01.11.2022  01.11.2022  02:00  0.675  01.11.2022 02:00
2   01.11.2022  01.11.2022  03:00  1.044  01.11.2022 03:00

已执行转码处理避免字符编码问题:

df['DateCP'] = df['DateCP'].apply(unidecode) 
df['DT'] = df['DT'].apply(unidecode)

但执行以下转换代码均触发错误:

df['DateCP'] = pd.to_datetime(df['DateCP'], format='%d.%m.%Y') 
# 或
df['DT'] = pd.to_datetime(df['DT'], format='%d.%m.%Y %H:%M')
# 或
df['Date'] = df['Date'].apply(lambda x:datetime.strptime(x,'%d.%m.%Y'))

仅添加errors='coerce'参数后,才能完成转换并得到预期结果:

Date     DateCP   Time    kWh                  DT
0   01.11.2022 2022-11-01  01:00  0.693 2022-11-01 01:00:00
1   01.11.2022 2022-11-01  02:00  0.675 2022-11-01 02:00:00
2   01.11.2022 2022-11-01  03:00  1.044 2022-11-01 03:00:00

原因解析

核心问题是你的DataFrame中存在隐藏的无效值(如字符串'0'),只是你展示的测试数据片段未包含这些行。

  • 当指定format参数时,pd.to_datetime和datetime.strptime会严格校验每一行数据的格式,只要有一行值不匹配指定格式,就会立即抛出ValueError终止转换。
  • errors='coerce'参数的作用是:将所有格式不匹配的无效值强制转换为NaT(Not a Time),跳过错误继续完成有效数据的转换,因此能得到你看到的预期结果。

验证与排查方法

你可以通过以下代码定位无效值:

# 筛选DateCP列中不符合'%d.%m.%Y'格式的行
invalid_datecp = df[~df['DateCP'].str.match(r'\d{2}\.\d{2}\.\d{4}')]
print("DateCP列无效值行:\n", invalid_datecp)

# 筛选DT列中不符合'%d.%m.%Y %H:%M'格式的行
invalid_dt = df[~df['DT'].str.match(r'\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}')]
print("DT列无效值行:\n", invalid_dt)

这些代码会输出所有格式不匹配的行,你就能找到导致错误的'0'或其他异常值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:45:13