前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pandas dataframe 时间字段 diff 函数

pandas dataframe 时间字段 diff 函数

原创
作者头像
魏守峰
修改2020-10-29 14:23:50
1.3K0
修改2020-10-29 14:23:50
举报
文章被收录于专栏:点滴积累点滴积累

pandas

pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网

需求介绍

最近在使用 pandas 的过程中碰到一个问题,需要计算数据中某时间字段下一行相对上一行的时间差,之前有用过 dataframe 的 diff 函数,但是官方的教程里只介绍了数值字段的操作,即结果为当前行减去上一行的差值,所以直观的以为时间字段无法进行此项操作。于是我使用了最原始的方式,循环遍历 dataframe 每一行,逐行求时间差,将其存入数组中,最后此数组即为结果。

解决方案

今天,再看代码的时候,想到为什么不尝试一下 diff 对于时间字段到底会得到什么结果呢?于是尝试了一下,并发现了些新东西,本文就将这个过程记录一下。

数据存在 csv 文件中,内容如下:

代码语言:javascript
复制
time
2020-02-01 8:00
2020-02-01 8:10
2020-02-01 8:20
2020-02-01 8:30
2020-02-01 8:40
2020-02-01 9:00
2020-02-01 9:10
2020-02-01 9:40
2020-02-01 10:00
2020-02-02 10:00

读取文件,并进行 diff 操作,代码段如下:

代码语言:javascript
复制
import pandas as pd
df = pd.read_csv('/your/file/path.csv', parse_dates=['time'])
time_diff = df['time'].diff()
print(time_diff)

其中 read_csv 为从硬盘中读取文件,parse_dates=['time'] 表示将 time 字段解析为时间。得到如下结果:

代码语言:javascript
复制
0               NaT
1   0 days 00:10:00
2   0 days 00:10:00
3   0 days 00:10:00
4   0 days 00:10:00
5   0 days 00:20:00
6   0 days 00:10:00
7   0 days 00:30:00
8   0 days 00:20:00
9   1 days 00:00:00
Name: time, dtype: timedelta64[ns]

从中我们可以看出, diff 操作对于时间字段确实有效,并真实的得到了上下行之间的时间差,只是使用 timedelta64[ns] 进行存储,而不是我们通常想到的秒。这样我们的问题就变的简单了,只需要将结果中的 timedelta64[ns] 类型转为秒数就可以了,之前从未接触过 timedelta64[ns] 字段,如何转呢?google 了一下,找到一个非常简单的解决方案,只需要将 timedelta64[ns] 强制转为 timedelta64[s] 即可,如下:

代码语言:javascript
复制
time_diff = time_diff.astype('timedelta64[s]')
print(time_diff)

结果如下:

代码语言:javascript
复制
0        NaN
1      600.0
2      600.0
3      600.0
4      600.0
5     1200.0
6      600.0
7     1800.0
8     1200.0
9    86400.0
Name: time, dtype: float64

可以看到,我们已经得到了以秒数为单位的上下行时间差,达到了想要的效果。

One more thing

我司推出了悟空流程化数据处理平台,访问地址:https://wk.phitrellis.com/,无需复杂的 Excel 公式和编程,即可完成上述计算时间差以及其他常用数据分析操作(包含100+常用操作和如站点数据处理等业务类操作),并可像流程图一样实现链式操作,欢迎尝试并提出宝贵意见!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pandas
  • 需求介绍
  • 解决方案
  • One more thing
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档