python - 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
我可以知道转换失败的可能原因是什么?谢谢!
解决方案
经过测试,对我来说工作正常。
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
推荐阅读
- python - 鱼壳选项卡完成程序简短描述 - 如何?
- react-native - 在 build\kotlin\sessions 检测到多个 Kotlin 守护进程会话 - React-Native
- c++ - 添加 boost 头文件会导致编译时错误
- ios - 如何使用 Getstream Rest API 在 Postman 中获取响应?
- python - 删除关键字周围的所有文本,包括空格和括号
- reactjs - 在firebase get函数中没有调用任何函数
- git - 尽管提供了所需的路径,如何修复“无法在您的路径中找到 Git”错误
- flutter - Flutter 获取库 - 未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'overlay'。E/颤振(29207):接收器:空
- javascript - 检查 redux 存储中的数据更新
- python - 需要找到'$word;' 字符串中的模式