python-3.x 如何在计算两个日期之间的差异时删除“天”?

nnsrf1az  于 2022-11-19  发布在  Python
关注(0)|答案(4)|浏览(219)

计算两个日期之间的差异时,请使用以下公式:

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

我得到了第三列“x天”。
如何将“x天”转换为int“x”。例如,将“50天”转换为“50”?
有人在以前的线程建议用途:

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

但是使用它会得到一个错误类型:
"'Series'对象没有属性'dt”
请问我如何解决此问题?

wtlkbnrh

wtlkbnrh1#

如果它是一个字符串变量,那么你可以执行以下操作,去掉不需要的部分。(假设你的变量是xDays)

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

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

df["xDays"].dt.days
9jyewag0

9jyewag02#

如果我坚持使用你的代码,但用虚构的数据填充,这种修改对我来说是有效的。基本上,你把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
epggiuax

epggiuax3#

功能

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
kgsdhlau

kgsdhlau4#

通过将每个减法变量转换为datetime,可以解决所遇到的错误。

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

相关问题