计算两个日期之间的差异

时间:2018-01-08 17:20:17

标签: python pandas datetime difference

我有一个带有两个日期列(Y-m-d)的数据库:

Date_from    Date_to     
17/01/01     17/01/05       
17/02/03     NaN           
17/05/01     17/05/05       
...

Date_from和Date_to是pandas列。

我构建了一个函数,如果: - 在Date_to中,NaN返回我" corrence&#34 ;; - 在Dta_to中没有Nan使两列之间产生差异

两个结果都保存在第三列中。像这样:

Data_from    Date_to     Difference
17/01/01     17/01/05       4
17/02/03     NaN           corrence    
17/05/01     17/05/05       4
...

功能如下:

from datetime import datetime

def diff(data,d1, d2):
    if pd.isnull(data.iloc[[1],[12]]):
         data['difference'] = 366
    else:
         data[d1] = pd.to_datetime(data[d1])
         data[d2] = pd.to_datetime(data[d2])
         data['difference'] = data[d2] - data[d1]
    return data

d1 = ["Date_from"]
d2 = ["Date_to"]
df = replace_NaN(df,d1,d2)  

出现的错误是:

TypeError: replace_NaN() takes 2 positional arguments but 3 were given

我不明白为什么

1 个答案:

答案 0 :(得分:3)

您不需要执行此功能。相反,

  1. 使用datetime
  2. 将列转换为pd.to_datetime
  3. Date_from
  4. 中减去Date_to
  5. 使用timedelta
  6. 提取dt.days列的days组件
  7. 在结果
  8. 上调用fillna

    i = pd.to_datetime(df.Date_to, format='%y/%m/%d', errors='coerce')
    j = pd.to_datetime(df.Date_from, format='%y/%m/%d', errors='coerce')
    
    df['Difference'] = i.sub(j).dt.days.fillna('corrence')
    

    df
    
      Date_from   Date_to Difference
    0  17/01/01  17/01/05          4
    1  17/02/03       NaN   corrence
    2  17/05/01  17/05/05          4