dataframe列上的dateoffset

时间:2014-12-08 16:51:31

标签: python pandas datetimeoffset

我有一个Pandas数据帧和一个列 称为到期,具有datetime64[ns]数据类型。 df.['expiration'][0]提供Timestamp('2010-12-31 00:00:00')

我想从此列中减去一个日历日,但无法弄清楚如何。 我试过了pandas.tseries.offsets.DateOffset(days=1),但是这给出了错误 不能在datetime / timedelta操作[<DateOffset: kwds={'days': 1}>]

中使用非绝对DateOffset

这显然是因为它只适用于timeindex。 所以我试过

import pandas
df['expiration']=df['expiration']-pandas.datetime.timedelta(days=1)

但这会导致另一个错误:

  

类型对象'datetime.datetime'没有属性'timedelta'

如何以某种方式做到这一点?

1 个答案:

答案 0 :(得分:2)

你有两个问题。首先,pandas.datetime是datetime.datetime类而不是模块,因此您需要直接引用datetime.timedelta类。其次,您需要距离列中的每个值一天。我愿意:

import datetime as dt
df['expiration'] = df['expiration'].apply(lambda x: x - dt.timedelta(days=1))

要进行矢量化,您需要将timedelta转换为numpy.timedelta64:

df['expiration'] = df['expiration'] - pt.timedeltas.to_timedelta(dt.timedelta(days=1))

或直接创建numpy.timedelta64:

df['expiration'] = df['expiration'] - numpy.timedelta64(1, 'D')