熊猫:从熊猫表中的日期中减去当前日期

Mat*_*sRa 6 python datetime date subtraction pandas

我试图计算今天和由历史数据组成的熊猫数据之间的天数差异。以下是预期的代码:

df['diff'] = pd.to_datetime( df['date']) - pd.datetime.now().date()
Run Code Online (Sandbox Code Playgroud)

但是,它会产生以下错误:

类型错误:不支持的操作数类型 -:'DatetimeIndex' 和 'datetime.date'

pandas 表中的日期列如下所示:

0       2018-12-18
1       2018-12-18
2       2018-12-18
3       2018-12-18
4       2018-12-18
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误。提前致谢。

jez*_*ael 5

您必须减去相同的类型 -日期时间日期时间(零次)或日期日期

使用Timestamp.now带有Timestamp.normalizeTimestamp.floor用于删除timeS:

df['diff'] = pd.to_datetime( df['date']) - pd.Timestamp.now().normalize() 

df['diff'] = pd.to_datetime( df['date']) - pd.Timestamp.now().floor('d')
Run Code Online (Sandbox Code Playgroud)

您还可以使用replace

dt = pd.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
df['diff'] = pd.to_datetime( df['date']) - dt
Run Code Online (Sandbox Code Playgroud)

或转换Datetimesdates 以减去相同类型:

dt = datetime.datetime.now().date()
df['diff'] = pd.to_datetime(df['date']).dt.date - dt
Run Code Online (Sandbox Code Playgroud)

样品

rng = pd.date_range('2018-04-03', periods=10, freq='100D')
df = pd.DataFrame({'date': rng}) 

df['diff'] = pd.to_datetime( df['date']) - pd.Timestamp.now().normalize() 
print (df)
        date      diff
0 2018-04-03 -261 days
1 2018-07-12 -161 days
2 2018-10-20  -61 days
3 2019-01-28   39 days
4 2019-05-08  139 days
5 2019-08-16  239 days
6 2019-11-24  339 days
7 2020-03-03  439 days
8 2020-06-11  539 days
9 2020-09-19  639 days
Run Code Online (Sandbox Code Playgroud)