解决Pandas从v1升级到v2后timedelta64类型转换ValueError
Pandas 2.0中timedelta按天转换的替代方案
Pandas 2.0对timedelta64类型的astype转换做了限制,不再支持直接转换到timedelta64[D]维度,仅保留秒(s)、毫秒(ms)、微秒(us)、纳秒(ns)的转换支持,这就是你遇到报错的原因。
针对你的需求,有以下几种替代方案:
方案1:获取整数天数(最直接)
如果只需要天数的数值(整数类型),直接使用dt.days属性提取:
df['recency'] = df['recency'].dt.days
方案2:保留timedelta类型
若需要保持结果为timedelta类型,可先提取天数再用pd.to_timedelta转换:
df['recency'] = pd.to_timedelta(df['recency'].dt.days, unit='D')
方案3:截断/取整到整天的timedelta
如果需要对原timedelta进行截断(或取整)到整天,使用dt.floor()或dt.round()方法:
# 截断到整天(舍去时分秒) df['recency'] = df['recency'].dt.floor('D') # 或四舍五入到整天 df['recency'] = df['recency'].dt.round('D')
修改后的完整示例代码
import pandas as pd df = pd.DataFrame({'designation_date': ['2021-01-01', '2021-01-02']}) df['recency'] = pd.to_datetime('today') - pd.to_datetime(df['designation_date']) # 任选一种方案替换原astype行 df['recency'] = df['recency'].dt.days # 方案1示例
内容的提问来源于stack exchange,提问作者Cornelius Roemer
相关产品推荐
相关产品推荐

