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

为何DataFrame.dt.days运算后日期转换类型有时为int有时为float?

问题场景与疑问

我有一个包含object类型日期列的DataFrame:
[含object类型日期的DataFrame]

执行以下代码检查列类型:

for column in date_columns:
    print(column)
    print(df[column].dtype)

输出结果:

order_purchase_timestamp
object

order_approved_at
object

我希望将这些列转换为距当前日期的天数,执行代码:

df[date_columns] = df[date_columns].apply(pd.to_datetime)
for column in date_columns:
    print(column)
    print("Was type :", df[column].dtype)
    df[column] = (datetime.now() - df[column]).dt.days
    print("Is now of type :", df[column].dtype)

输出结果:

order_purchase_timestamp
Was type : datetime64[ns]
Is now of type : int64

order_approved_at
Was type : datetime64[ns]
Is now of type : float64

得到的DataFrame如下:
[同时含int和float类型天数的DataFrame]

为何第一列转换为int类型,第二列却为float类型?(我知道可自行转换类型,仅好奇原因)


原因解析

核心原因是**order_approved_at列中存在缺失值(NaN)**:

  • Pandas的整数类型(int64)无法存储缺失值NaN,当列中存在NaN时,计算后的结果会自动转为float64类型(浮点数类型支持存储NaN)。
  • 而order_purchase_timestamp列没有缺失值,计算后所有结果都是整数,因此可以保持int64类型。

内容的提问来源于stack exchange,提问作者Barthélémy Déchanet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:37:03