我有一个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}>]
这显然是因为它只适用于timeindex。 所以我试过
import pandas
df['expiration']=df['expiration']-pandas.datetime.timedelta(days=1)
但这会导致另一个错误:
类型对象'datetime.datetime'没有属性'timedelta'
如何以某种方式做到这一点?
答案 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')