Pandas read_csv解析日期列返回datetime与Timestamp类型不一致问题排查
问题成因
- Pandas 1.3.4 内部的 datetime 列自动优化逻辑差异
Pandas 的read_csv在接收到自定义date_parser返回的日期序列后,会按列做类型优化适配:- DateA 列所有值都带时分秒分量,该列会被存储为
datetime64[ns]类型,单值提取时返回原生 Python datetime.datetime 对象 - DateB 列所有值都是纯日期(解析后的时间分量固定为 00:00:00),Pandas 会自动对该列的单值做 Timestamp 装箱。Timestamp 本身是 datetime.datetime 的子类,常规运算场景完全兼容,但做严格类型判断时会被识别为不同类型。
- DateA 列所有值都带时分秒分量,该列会被存储为
- 自定义解析函数的返回形式触发了自动装箱规则
你当前的解析函数直接返回了 datetime.datetime 对象组成的列表,Pandas 对全日期、无时间分量的 datetime 序列默认会触发 Timestamp 转换逻辑。
类型转换方法
不存在无法将 Timestamp 转为原生 datetime 的情况,直接调用 Timestamp 实例的官方方法 to_pydatetime() 即可完成转换,整列转换示例:
df['DateB'] = df['DateB'].apply(lambda x: x.to_pydatetime())
内容的提问来源于stack exchange,提问作者paul590
相关产品推荐
相关产品推荐

