我有一个带有两个日期列(年-月-日)的数据库:
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”; - 在 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
不明白为什么
最佳答案
您不需要函数来执行此操作。相反,
- 使用
pd.to_datetime
将列转换为datetime
- 从
Date_to
中减去Date_from
- 使用
dt.days
提取timedelta
列的天数部分 - 对结果调用
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
关于python - 计算两个日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155048/