当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在pandas中将整数序列转换为timedelta》经验,为你挑选了1个好方法。

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

例如,假设我的数据框看起来像这样:

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

我想创建一个包含事件日期的新列,因此我的预期结果(使用今天的2015年12月29日的日期)

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

这也引用了一个错误,引用该系列是不受支持的类型.



1> joris..:

首先,要将具有整数的列转换为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]

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有