计算两个日期之间的差异时如何删除"days"?



使用以下方法计算两个日期之间的差值时:

df_test['Difference'] = (df_test['First_Date'] - df_test['Second Date'])

我得到第三列"x 天"。

如何将"x 天">

转换为整数"x",例如,将"50 天"转换为"50"?

上一个线程中的某个人建议使用:

df_test['Difference'] = (df_test['First_Date'] - df_test['Second Date']).dt.days

但是使用它我得到一个类型的错误:

"'系列'对象没有属性'dt'

请问我该如何解决问题?

如果是字符串变量。 然后,您可以执行以下操作并去除不需要的部分。 (假设您的变量是 xDays(

df["xDays"] = df["xDays"].map(lambda x: x[:-5])

如果是时间增量值,您可以执行以下操作

df["xDays"].dt.days

通过将每个减法变量转换为日期时间,您可以解决遇到的错误。以下方法应该有效:

df_test['Difference'] = (pd.to_datetime(df_test['First_Date']).dt.date - pd.to_datetime(df_test['Second Date']).dt.date).dt.days

如果我坚持使用您的代码但填写编造的数据,则此修改对我有用。基本上,您将df_test['Difference'].dt.days重新分配给df_test['Difference']

df_test=pd.DataFrame(dict(zip(['First_Date', 'Second_date'], [pd.date_range("2018-01-01",periods=10), pd.date_range("2017-01-01",periods=10)])))
df_test['Difference'] = df_test['First_Date'].sub(df_test['Second_date'], axis=0)
df_test['Difference']=df_test['Difference'].dt.days

函数

def duration(diff):
    tsec = diff.total_seconds()
    hh = int(tsec//3600)
    mm = int((tsec%3600)//60)
    ss = int((tsec%3600)%60)
    return('{:02d}:{:02d}:{:02d}'.format(hh,mm,ss))

测试结果:

import datetime as dt
d1 = dt.datetime(2020, 10, 21, 10, 15, 12) - dt.datetime(2020, 10, 20,  8, 5, 12)
d2 = dt.datetime(2020, 10, 21, 10, 15, 12) - dt.datetime(2020, 10, 21,  8, 0,  0)
d3 = dt.datetime(2020, 10, 21, 10, 15, 12) - dt.datetime(2020, 10, 22, 10, 5,  0)
print(duration(d1))   #    26:10:00
print(duration(d2))   #    02:15:12
print(duration(d3))   #   -24:10:12

输出

 26:10:00
 02:15:12
-24:10:12

最新更新