为何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
相关产品推荐
相关产品推荐

