首页 > 解决方案 > Python中日期差到数字的错误转换

问题描述

我有一个数据集:

     A                               B
2019-06-19 09:18:00         2019-06-22 09:14:37
2019-06-27 22:35:00         2019-06-27 22:04:20
2019-06-26 19:50:00         2019-06-26 21:18:45

它代表两列的日期时间。

我想构建一个列 C ,将日期时间的差异显示为十进制小时数,并应用以下转换。

raw_data['C']= raw_data['B'] - raw_data['A']
raw_data['C']= round(raw_data['C']/np.timedelta64(1,'h'),2)

我设法得到了正确的价值计算:

  C               A                         B
71.94    2019-06-22 09:14:37      2019-06-19 09:18:00
-0.51    2019-06-27 22:04:20      2019-06-27 22:35:00
1.48     2019-06-26 21:18:45      2019-06-26 19:50:00

但是,当我尝试创建一个分类变量 D 时,如果列 C 小于 3,它将是“通过”,我对第三行进行了错误的转换。即它应该是“通过”值。

raw_data['D']= "Fail"
raw_data.loc[raw_data['C']<3, 'D']= 'Pass'


  D        C
71.94    Fail
-0.51    Pass
1.48     Fail

我可以知道转换失败的可能原因是什么?谢谢!

标签: pythonpandasnumpy

解决方案


经过测试,对我来说工作正常。

Series.dt.total_seconds使用除以Series.div和的替代解决方案Series.round,最后用于新列numpy.where

raw_data['C']= raw_data['B'] - raw_data['A']
raw_data['C']=  raw_data['C'].dt.total_seconds().div(3600).round(2)

raw_data['D']= np.where(raw_data['C']<3,'Pass',"Fail") 
print (raw_data)
                    A                   B      C     D
0 2019-06-19 09:18:00 2019-06-22 09:14:37  71.94  Fail
1 2019-06-27 22:35:00 2019-06-27 22:04:20  -0.51  Pass
2 2019-06-26 19:50:00 2019-06-26 21:18:45   1.48  Pass

推荐阅读