MonthEnd object导致<11*MonthEnds>而不是numb

2024-04-24 23:58:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的pandas数据框中,我想找出以月份为单位的日期之间的差异。函数.dt.to_period('M')生成一个MonthEnd对象,比如<11 * MonthEnds>,而不是月份号。在

我试图用pd.to_numeric()更改列类型,并删除带有re.sub("[^0-9]", "", 'blablabla123bla')的字母。两者都不适用于MonthEnd对象。在

df['duration_dataset'] = df['date_1'].dt.to_period('M') - df['date_2'].dt.to_period('M')

我期望11,但是输出是<11 * MonthEnds>。在

这是一个最小的数据帧

^{pr2}$

Tags: to数据对象函数pandasdfdatedt
1条回答
网友
1楼 · 发布于 2024-04-24 23:58:07

这是new behaviour in Pandas 0.24,其中减去Period()对象得到一个^{} subclass。在

您可以从DateOffset.n属性中获取数值:

from operator import attrgetter

df['duration_dataset'] = (
    df['date_1'].dt.to_period('M') -
    df['date_2'].dt.to_period('M')).apply(attrgetter('n'))

这就产生了

^{pr2}$

对于示例数据帧。在

您可以将日期转换为自0年起的月数,而不是将日期转换为期间,然后减去这些数字:

df['duration_dataset'] = (
    df['date_1'].dt.year * 12 + df['date_1'].dt.month - 1 -
    (df['date_2'].dt.year * 12 + df['date_2'].dt.month - 1)
)

相关问题 更多 >