熊猫两栏的日期差

时间:2020-11-10 00:10:00

标签: python pandas numpy datetime

字段“现在”,“结束日期”和“创建日期”是日期。使用EndDate / CreateDate的最新日期,“ diff_m”输出该字段与“现在”(向下取整)之间的月份差。

now=dt.now()
df['MaxDate'] = df[['EndDate', 'CreateDate']].max(axis=1)
df['diff_months'] = now - df['MaxDate']
df['diff_months']=df['diff_months']/np.timedelta64(1,'M')
df['diff_m']=df['diff_months'].apply(np.floor)

但是,出现以下错误:

TypeError unsupported operand type(s) for -: 'datetime.datetime' and 'float'

我看到CreateDate / EndDate是dtype:datetime64 [ns]

1 个答案:

答案 0 :(得分:1)

问题出在那

df['diff_months'] = now - df['MaxDate']

找到最大值后,新创建的列的类型将更改,因此您可以通过简单地使用pd.to_datetime

来解决此问题。
df['diff_months'] = now - pd.to_datetime(df['MaxDate'])

我尝试了一个小例子,结果如下:

In [36]: new_df['temp_date'] = new_df[['date','new_date']].max(axis=1)

In [37]: now = datetime.now()

In [38]: new_df['diff_mon'] = now-new_df['temp_date']

TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'str'

但是,将其转换为日期时间

In [39]: new_df['diff_mon'] = now-pd.to_datetime(new_df['temp_date'])

In [40]: new_df['diff_mon']
Out[40]: 
0    7487 days 19:20:37.060114
1    7547 days 19:20:37.060114
相关问题