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

调用Series.unique().tolist()时datetime自动转为int的原因是什么

Pandas datetime类型Series调用unique().tolist()转整数的原因

底层存储逻辑

pandas中datetime64[ns]类型的Series,底层默认以纳秒级Unix时间戳的int64整数存储所有时间数据,我们看到的时间格式只是上层的语义封装,底层实际存储的都是整数值。

方法行为差异原因

  • Series.unique()针对datetime类型的返回值是pandas.arrays.DatetimeArray类型,该对象本身保留了完整的时间类型语义,直接遍历、或者用list()直接包裹转换时,会自动将底层整数封装为pandas.Timestamp类型返回,符合使用预期。
  • 该问题只会出现在pandas 1.3及更早的版本中:旧版本中DatetimeArray.tolist()的实现逻辑没有做上层类型封装,会直接导出底层存储的int64纳秒时间戳,这就是你看到自动转换为int类型的核心原因。pandas 1.4及之后的版本已经修复了这个问题,DatetimeArray.tolist()会直接返回Timestamp类型的列表。

兼容解决方案

如果不方便升级pandas版本,除了直接遍历Series.unique()的返回值外,也可以用以下两种方式得到时间类型的结果:

  • 用list(Series.unique())替代Series.unique().tolist(),触发DatetimeArray的迭代封装逻辑
  • 手动对结果做类型转换:pd.to_datetime(Series.unique().tolist(), unit='ns')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:27:03