我有一个带有两个日期列(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
我不明白为什么
答案 0 :(得分:3)
您不需要执行此功能。相反,
datetime
pd.to_datetime
Date_from
Date_to
timedelta
dt.days
列的days组件
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