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

pandas合并年月日多列为datetime列报unconverted data remains错误如何解决

错误原因
  1. 传入多列DataFrame时,pd.to_datetime()的format参数不生效,你指定的"%d/%m/%Y"格式和传入的年、月、日列顺序完全不匹配,是第一段代码报错的直接原因。
  2. 未指定format仍报错的核心原因是存在无效日期值:你只检查了空值和特殊字符,但忽略了日期本身的合法性,比如出现2月30日、4月31日、月份值超过12、日期值超过当月最大天数等异常值,都会触发转换失败。
解决步骤
  1. 先确认年、月、日三列的数据类型为整数,若为字符串类型先执行转换:
# 检查数据类型
print(df[['year','month','day']].dtypes)
# 转换为整数类型
df[['year','month','day']] = df[['year','month','day']].astype(int)
  1. 开启errors='coerce'参数,把无法转换的无效日期转为空值NaT,定位问题行:
df['DATE'] = pd.to_datetime(df[['year','month','day']], errors='coerce')
# 筛选出转换失败的异常行
invalid_dates = df[df['DATE'].isna()][['year','month','day']]
print("无效日期行:\n", invalid_dates)

修改或删除异常行后即可正常转换。

备用稳妥方案

如果不想先排查异常值,可以先把三列拼接为标准日期字符串后再转换:

# 拼接为「年-月-日」格式的字符串
date_ser = df['year'].astype(str) + '-' + df['month'].astype(str) + '-' + df['day'].astype(str)
# 转换为datetime类型
df['DATE'] = pd.to_datetime(date_ser, format='%Y-%m-%d', errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 13:24:01