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

如何移除pd.to_datetime未转换值的字符串后缀并转为datetime

问题描述

尝试使用pd.to_datetime(df, format='%Y-%m-%d_%H-%M-%S')将日期列转换为datetime类型时,收到错误ValueError: unconverted data remains: .1。排查发现date列中有119条(共1037808条)数据末尾带有多余的.1,其余日期格式正常。尝试data.date = data.date.replace(".1", "")和data = data.replace(".1", "")均无法移除该后缀,需要仅移除这些日期末尾的.1后将列转换为datetime类型。

问题复现代码:

import pandas as pd

data = pd.DataFrame({"date" : ["2022-01-15_08-11-00.1","2022-01-15_08-11-30","2022-01-15_08-12-00.1", "2022-01-15_08-12-30"], 
                     "value" : [1,2,3,4]})

期望最终结果:

data = pd.DataFrame({"date" : ["2022-01-15_08-11-00","2022-01-15_08-11-30","2022-01-15_08-12-00", "2022-01-15_08-12-30"], 
                         "value" : [1,2,3,4]})
解决方案

方法1:正则精准替换末尾的.1(推荐)

Pandas的Series.replace默认不启用正则,且是全局替换,无法精准匹配末尾的.1。改用str.replace配合正则表达式,只替换字符串末尾的.1:

# 仅移除日期字符串末尾的.1
data['date'] = data['date'].str.replace(r'\.1$', '', regex=True)
# 转换为datetime类型
data['date'] = pd.to_datetime(data['date'], format='%Y-%m-%d_%H-%M-%S')

正则r'\.1$'说明:\.匹配点号(避免被当作正则通配符),$表示匹配字符串结尾,确保只处理带.1后缀的日期。

方法2:直接让pd.to_datetime自动解析

如果不需要保留原字符串格式,可跳过手动替换,让pd.to_datetime自动识别格式:

data['date'] = pd.to_datetime(data['date'], errors='coerce')

注意:此方法效率略低于指定format,适合数据量较小的场景;百万级数据优先选方法1。

方法3:用str.rstrip移除固定后缀

若确认所有多余后缀都是.1,可直接用str.rstrip移除末尾的.1字符:

data['date'] = data['date'].str.rstrip('.1')
# 后续转换datetime
data['date'] = pd.to_datetime(data['date'], format='%Y-%m-%d_%H-%M-%S')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:00:24