从 pandas 版本 1 升级到 2.0.0 时,我突然在将 pandas 升级到版本 2 之前运行良好的脚本中得到一个
ValueError
:
ValueError: Cannot convert from timedelta64[ns] to timedelta64[D].
Supported resolutions are 's', 'ms', 'us', 'ns'
这是一个可重现性最低的示例:
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'])
df['recency'] = df['recency'].astype('timedelta64[D]')
我需要用什么替换
df['recency'].astype('timedelta64[D]')
才能使代码与 pandas v2 一起使用?
使用
astype('timedelta64[D]')
在整个 SO 的答案中被大量使用,例如这里。
使用
.dt.days
访问器而不是 astype('timedelta64[D])
:
df['recency'] = df['recency'].dt.days
从 v1 到 v2 的行为变化记录在 Pandas 变更日志中。
df['新近度'] = pd.to_timedelta(df['新近度']) df['新近度'] = df['新近度'].dt.days