python - 如何从 pandas 中的 m8[ns] 对象中获取小时数?
问题描述
我有一个如下所示的数据框
df = pd.DataFrame({'time':['2166-01-09 14:00:00','2166-01-09 14:08:00','2166-01-09 16:00:00','2166-01-09 20:00:00',
'2166-01-09 04:00:00','2166-01-10 05:00:00','2166-01-10 06:00:00','2166-01-10 07:00:00','2166-01-10 11:00:00',
'2166-01-10 11:30:00','2166-01-10 12:00:00','2166-01-10 13:00:00','2166-01-10 13:30:00']})
我试图找到行之间的时间差。为此我做了以下
df['time2'] = df['time'].shift(-1)
df['tdiff'] = (df['time2'] - df['time'])
所以,我的结果如下所示
我发现存在类似的功能dt.days
,我尝试了
df['tdiff'].dt.days
但它只提供白天组件,但我正在寻找类似“小时”组件的东西
但是,我希望我的输出如下所示
很抱歉,我不确定如何计算第 3 行中负时间的小时数。可能是数据问题。
解决方案
在 pandas 中,可以将 timedeltas 转换为秒Series.dt.total_seconds
,然后除以3600
:
df['tdiff'] = (df['time2'] - df['time']).dt.total_seconds() / 3600
print (df)
time time2 tdiff
0 2166-01-09 14:00:00 2166-01-09 14:08:00 0.133333
1 2166-01-09 14:08:00 2166-01-09 16:00:00 1.866667
2 2166-01-09 16:00:00 2166-01-09 20:00:00 4.000000
3 2166-01-09 20:00:00 2166-01-09 04:00:00 -16.000000
4 2166-01-09 04:00:00 2166-01-10 05:00:00 25.000000
5 2166-01-10 05:00:00 2166-01-10 06:00:00 1.000000
6 2166-01-10 06:00:00 2166-01-10 07:00:00 1.000000
7 2166-01-10 07:00:00 2166-01-10 11:00:00 4.000000
8 2166-01-10 11:00:00 2166-01-10 11:30:00 0.500000
9 2166-01-10 11:30:00 2166-01-10 12:00:00 0.500000
10 2166-01-10 12:00:00 2166-01-10 13:00:00 1.000000
11 2166-01-10 13:00:00 2166-01-10 13:30:00 0.500000
12 2166-01-10 13:30:00 NaT NaN
推荐阅读
- javascript - 以清晰的格式显示 json 数据
- javascript - 不确定如何在 JS 中映射未知值(反应)
- json - 如何修复 Angular 中的“_co.x is undefined”错误?
- android - 使用android studio制作的应用程序只在一部手机上显示广告,而在其他手机上不显示
- javascript - 在 php mysqli 中需要正确的 Begin、Commit 和 RollBack 事务语法
- vb.net - IIS .Net 运行时错误上的 Googlewebauthorizationbroker.AuthorizeAsync
- excel - 从数组中提取多个数据列表,其中结果数据中的每一行都引用源数据中的同一单元格
- dart - 在 StreamBuilder 中使用 SnackBar 的奇特方式是什么?
- javascript - JavaScript 在顶部还是底部?
- c# - 将相机统一连接到可编写脚本的对象