我有一个日期框架(df
),其头部看起来像:
DATE BBG FLAG DATE_DIFF
0 2014-03-04 A 0 NaT
1 2014-04-04 B 1 31 days
2 2014-04-07 C 0 3 days
3 2014-04-08 D 0 1 days
4 2014-04-09 E 0 1 days
列DATE_DIFF
是一行中的日期和上面一行中的日期之间的差。我使用以下内容来计算DATE_DIFF
:
df['DATE_DIFF'] = (df['DATE']-df['DATE'].shift(1))
我正在寻找一种将DATE_DIFF列转换为整数的方法,以便使结果数据帧看起来像这样:
DATE BBG FLAG DATE_DIFF
0 2014-03-04 A 0 NaN
1 2014-04-04 B 1 31
2 2014-04-07 C 0 3
3 2014-04-08 D 0 1
4 2014-04-09 E 0 1
我尝试使用:
df['DATE_DIFF'] = (df['DATE']-df['DATE'].shift(1)).astype(int)
但这只是给我一个错误:
TypeError: cannot astype a timedelta from [timedelta64[ns]] to [int32]
答案 0 :(得分:1)
只需添加dt.days
df['diff'] = (df['DATE']-df['DATE'].shift(1)).dt.days
DATE BBG FLAG diff
0 2014-03-04 A 0 NaN
1 2014-04-04 B 1 31.0
2 2014-04-07 C 0 3.0
3 2014-04-08 D 0 1.0
4 2014-04-09 E 0 1.0
请注意,因为第一行是NaN,所以dtype将是float而不是int
答案 1 :(得分:0)
如果有两个日期对象,则可以减去它们。
from datetime import date
d0 = date(2008, 8, 18)
d1 = date(2008, 9, 26)
delta = d1 - d0
print delta.days