pandas调用pd.to_datetime报错混合日期时间与整数解决方案
报错根因
这个错误和重复值无关,本质是你要转换的时间列里同时混杂了日期格式值和整数类型值(可能是误录入的数字、未格式化的Unix时间戳、异常编码的空值等),pd.to_datetime()默认自动推断格式时无法统一处理混存类型,就会抛出该错误,去重操作完全不涉及类型清洗,自然解决不了问题。
第一步:先定位脏数据
先跑以下代码把列里无法正常解析为时间的异常行筛出来,确认整数的来源:
import pandas as pd def is_invalid(value): try: pd.to_datetime(value) return False except: return True # 筛选出所有异常值行 abnormal_df = df[df['Timestamp'].apply(is_invalid)] print(abnormal_df)
根据输出的异常内容,按业务规则修正脏值:如果是录入错误就改回正确时间格式,如果是无意义脏值可以直接删除或填充。
第二步:分场景执行转换
- 如果筛出来的整数是Unix时间戳(和格式化时间字符串混存),转换时加上对应参数,同时加兜底规则避免报错:
# 秒级时间戳用unit='s',毫秒级改成unit='ms' df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce', unit='s')
参数errors='coerce'会把实在无法解析的异常值统一转为NaT(pandas的空时间类型),不会中断转换流程。
- 如果整数是无意义的录入脏值,清理完定位到的异常数据后,直接带兜底参数转换即可:
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce')
额外提醒:你的代码里写的转换列名是
My_Datetime,但给出的DataFrame示例里时间列名是Timestamp,转换前务必确认列名和实际列匹配,列名写错也可能触发意料之外的类型报错。
内容的提问来源于stack exchange,提问作者nilsinelabore
相关产品推荐
相关产品推荐

