Pandas多列类型转换异常:含datetime数组列无法转为datetime
解决DataFrame混合类型列转datetime失败的问题
问题原因
那两列原本混合了datetime.datetime对象和NaN,你用字符串'2030-1-1'填充后,列内变成了datetime对象与字符串的混合类型,pd.to_datetime处理这种混合集合时,会统一按字符串解析,但datetime对象转字符串的格式可能不符合解析规则,导致转换失败。
修正后的操作步骤
针对这两列,换以下流程处理:
- 先直接转换为datetime类型:
这一步会把原有的df[col] = pd.to_datetime(df[col])datetime.datetime对象转为pandas的datetime64类型,同时保留NaN(pandas原生支持datetime列存NaN)。 - 用pandas原生的时间戳填充缺失值:
用df[col] = df[col].fillna(pd.Timestamp('2030-01-01'))pd.Timestamp生成的时间戳和datetime列类型一致,不会出现类型混合问题。
验证方法
如果不确定列内的元素类型,可先运行以下代码查看:
print(df[col].apply(type).unique())
正常情况下,转换后列的元素类型应该只有pandas._libs.tslibs.timestamps.Timestamp一种。
内容的提问来源于stack exchange,提问作者Helio_Prado
相关产品推荐
相关产品推荐

