pandas dataframe 时间字段 diff 函数
pandas
pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网。
需求介绍
最近在使用 pandas 的过程中碰到一个问题,需要计算数据中某时间字段下一行相对上一行的时间差,之前有用过 dataframe 的 diff 函数,但是官方的教程里只介绍了数值字段的操作,即结果为当前行减去上一行的差值,所以直观的以为时间字段无法进行此项操作。于是我使用了最原始的方式,循环遍历 dataframe 每一行,逐行求时间差,将其存入数组中,最后此数组即为结果。
解决方案
今天,再看代码的时候,想到为什么不尝试一下 diff 对于时间字段到底会得到什么结果呢?于是尝试了一下,并发现了些新东西,本文就将这个过程记录一下。
数据存在 csv 文件中,内容如下:
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 操作,代码段如下:
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 字段解析为时间。得到如下结果:
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] 即可,如下:
time_diff = time_diff.astype('timedelta64[s]')
print(time_diff)
结果如下:
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+常用操作和如站点数据处理等业务类操作),并可像流程图一样实现链式操作,欢迎尝试并提出宝贵意见!
pandas dataframe 时间字段 diff 函数的更多相关文章
- mysql  时间字段的函数 timestamp
		Mysql 里格式 时间字段的函数 DATE_FORMAT unix_timestamp - 墨墨修行的日志 - 网易博客http://jjuanxi.blog.163.com/blog/static ... 
- SQLITE 时间字段操作函数
		SQLite中的时间日期函数 这是我学习SQLite时做的笔记,参考并翻译了Chris Newman写的<SQLite>中的<Working with Dates and Times ... 
- Python时间处理,datetime中的strftime/strptime+pandas.DataFrame.pivot_table(像groupby之类 的操作)
		python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime 1.由日期格式转化为字符串格式的函数为: datetime.datetime.s ... 
- pandas DataFrame apply()函数(1)
		之前已经写过pandas DataFrame applymap()函数 还有pandas数组(pandas Series)-(5)apply方法自定义函数 pandas DataFrame 的 app ... 
- pandas DataFrame apply()函数(2)
		上一篇pandas DataFrame apply()函数(1)说了如何通过apply函数对DataFrame进行转换,得到一个新的DataFrame. 这篇介绍DataFrame apply()函数 ... 
- pandas DataFrame.shift()函数
		pandas DataFrame.shift()函数可以把数据移动指定的位数 period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列. eg: 有这样一个DataFrame ... 
- pandas DataFrame applymap()函数
		pandas DataFrame的 applymap() 函数可以对DataFrame里的每个值进行处理,然后返回一个新的DataFrame: import pandas as pd df = pd. ... 
- 【跟着stackoverflow学Pandas】add one row in a pandas.DataFrame -DataFrame添加行
		最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ... 
- 如何通过Elasticsearch Scroll快速取出数据,构造pandas dataframe — Python多进程实现
		首先,python 多线程不能充分利用多核CPU的计算资源(只能共用一个CPU),所以得用多进程.笔者从3.7亿数据的索引,取200多万的数据,从取数据到构造pandas dataframe总共大概用 ... 
随机推荐
- LazySysAdmin 靶机渗透
			Vulnhub-LazySysAdmin 靶机渗透 发现六个开放的端口,分别为22,80,139,445,3306以及6667. 139/tcp open netbios-ssn Samba smbd ... 
- zabbix_server.conf配置文件参数
			NodeID: 在amster-child 的分布式架构中,这个ID是唯一标识zabbix node的号码 ListenPort:Trapper 类型Item监听的端口, SourceIP: 在连接其 ... 
- Spring一些笔记
			@ControllerAdvice ,被注解的class表示这是一个增强的 Controller. 使用这个 Controller ,可以实现三个方面的功能: 全局异常处理 全局数据绑定 全局数据预处 ... 
- mysql-13-auto_increment
			# 标识列 /* 自增长列 可以不用手动的插入值,系统提供默认的序列值 1.标识列必须和 key 搭配使用,比如主键.唯一键.外键 2.一个表至多一个标识列 3.标识列的类型只能是数值型 4.标识列可 ... 
- 006  01 Android 零基础入门  01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序
			006 01 Android 零基础入门 01 Java基础语法 01 Java初识 06 使用Eclipse开发Java程序 Eclipse下创建程序 创建程序分为以下几个步骤: 1.首先是创建一个 ... 
- TCHAR数据类型介绍
			转载:https://blog.csdn.net/mousebaby808/article/details/5259944 并不是所有的Windows操作系统都支持UNICODE编码的API(例如早期 ... 
- JavaScript事件对象属性e.target和this的区别
			前言: Event对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象eve ... 
- STM32F103C8T6驱动WS2812b灯条
			STM32F103C8T6驱动WS2812b灯条 几天小朋友到别人家玩,看上了人家的金鱼,人家就给了她一条小金鱼,有了小金鱼,怕它没氧气挂掉,买了一个氧气泵,没有东西喂它也不行,又买了一包鱼料,又因为 ... 
- MeteoInfo脚本示例:读取FY3A AOD HDF文件
			FY3A卫星有AOD产品数据,HDF格式,这里示例用MeteoInfo脚本程序读取和显示该类数据. 脚本程序如下: #----------------------------------------- ... 
- 串口wifi
			串口wifi 串口WiFi ZLAN7146是一款wifi转串口的wifi串口服务器.该串口服务器可以方便地使得串口设备连接到WIFI无线网络,实现串口设备的无线化网络升级.RS232接口支持全双工. ... 
