在pandas中将整数序列转换为timedelta

2024-04-24 20:13:06 发布

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

我有一个熊猫的数据框架,其中包括事件发生后的天数。我想创建一个新列,通过从当前日期中减去天数来计算事件的日期。每次尝试应用pd.offsets.Daypd.Timedelta时,都会收到一个错误,指出序列是不受支持的类型。当我使用apply时也会发生这种情况。当我使用map时,我收到一个运行时错误,说“调用Python对象时超过了最大递归深度”。

例如,假设我的数据帧如下所示:

index    days_since_event
0        5
1        7
2        3
3        6
4        0

我想创建一个新的列,列上事件的日期,所以我的预期结果(使用今天的日期12/29/2015)

index    days_since_event    event_date
0        5                   2015-12-24
1        7                   2015-12-22
2        3                   2015-12-26
3        6                   2015-12-23
4        0                   2015-12-29

我尝试了多种方法来实现这一点,但每种方法都收到错误。

我试过的一种方法是:

now = pd.datetime.date(pd.datetime.now())
df['event_date'] = now - df.days_since_event.apply(pd.offsets.Day)

因此,我收到一个错误,说系列是不支持的类型。

我用.map而不是.apply尝试了上面的方法,并在调用Python对象“时收到了超过最大递归深度的错误。

我还尝试将日期转换为timedelta,例如:

df.days_since_event = (dt.timedelta(days = df.days_since_event)).apply

这还收到一个错误,引用的序列是不支持的类型。


Tags: 数据方法event类型dfdate错误事件
1条回答
网友
1楼 · 发布于 2024-04-24 20:13:06

首先,要将带整数的列转换为timedelta,可以使用to_timedelta

In [60]: pd.to_timedelta(df['days_since_event'], unit='D')
Out[60]:
0   5 days
1   7 days
2   3 days
3   6 days
4   0 days
Name: days_since_event, dtype: timedelta64[ns]

然后,可以使用当前日期创建一个新列,并将这些timedelta的值减去:

In [62]: df['event_date'] = pd.Timestamp('2015-12-29')

In [63]: df['event_date'] = df['event_date'] -  pd.to_timedelta(df['days_since_event'], unit='D')

In [64]: df['event_date']
Out[64]:
0   2015-12-24
1   2015-12-22
2   2015-12-26
3   2015-12-23
4   2015-12-29
dtype: datetime64[ns]

相关问题 更多 >