我在熊猫中有一个数据框,其中包括自事件发生以来的天数.我想创建一个新列,通过减去当前日期的天数来计算事件的日期.每次我尝试应用pd.offsets.Day或pd.timedelta时,都会收到错误消息,指出Series是不受支持的类型.当我使用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
解决方法:
首先,要将具有整数的列转换为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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。