【数据处理·Python】时间数据处理之Arrow库(转)
来源:互联网 发布:西师大知行学院咋样 编辑:程序博客网 时间:2024/06/07 03:03
python的时间,之前转了一篇naive active time 颇有感受,今天突然在书签里看到了arrow库, 看到了知乎一篇很好的文章 很有条理,这库在数据处理的时候很有用。
https://zhuanlan.zhihu.com/p/25091834
在处理数据的时候经常会碰见各种时间数据,但因为时间数据的格式不统一,所以导致数据处理的时候有一些麻烦。Python的标准库提供了相应模块,但可用性却不高,也不够人性化。本专栏之前已经有文章介绍过在R中如何处理时间数据(lubridate包),而Python中也有实现类似功能的包。这篇文章我们讲一下如何使用Python的第三方库Arrow来处理时间数据。
Arrow提供一种易用的智能的方式来创建、操作、格式化和转换时间数据。
基本使用
Arrow处理时间数据时需要先将数据转为Arrow对象,Arrow可以灵活的转化多种格式的时间数据,如以不同间隔符分隔的时间数据:
>>> arrow.get('2017-01-05')<Arrow [2017-01-05T00:00:00+00:00]>>>> arrow.get('2017.01.05')<Arrow [2017-01-05T00:00:00+00:00]>>>> arrow.get('2017/01/05')<Arrow [2017-01-05T00:00:00+00:00]>>>> arrow.get('2017/01.05')<Arrow [2017-01-05T00:00:00+00:00]>
还有以不同顺序排列的时间数据:
>>> arrow.get('05/2017.01', 'DD/YYYY.MM')<Arrow [2017-01-05T00:00:00+00:00]>>>> arrow.get('05/01/2017', 'DD/MM/YYYY')<Arrow [2017-01-05T00:00:00+00:00]>>>> arrow.get('01.05.2017', 'MM.DD.YYYY')<Arrow [2017-01-05T00:00:00+00:00]>timestamps时间数据当然也可以:>>> arrow.get('1586782011')<Arrow [2020-04-13T12:46:51+00:00]>>>> arrow.get('1586782011.123456')<Arrow [2020-04-13T12:46:51.123456+00:00]>
字符串中的时间数据也可以获取:
>>> arrow.get('June was born in May 1980', 'MMMM YYYY')<Arrow [1980-05-01T00:00:00+00:00]>
获取数据
转换为Arrow对象后,我们可以很方便的获取我们想要的各种时间数据,通过year、month、day、hour、minute、second、week等属性,如:
>>> now = arrow.now()>>> now<Arrow [2017-02-04T13:47:58.114342+08:00]>>>> now.year2017>>> now.month2>>> now.day4>>> now.hour13>>> now.minute47>>> now.second58>>> now.week5
修改数据
我们免不了需要对时间数据进行操作修改,Arrow也提供了很方便的方法来操作,如切换时区to()方法:
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc<Arrow [2017-02-03T13:47:58.114342+00:00]>>>> utc.to('local')<Arrow [2017-02-03T21:47:58.114342+08:00]>>>> utc.to('US/Pacific')<Arrow [2017-02-03T05:47:58.114342-08:00]>>>> utc.to('+02:00')
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc<Arrow [2017-02-03T13:47:58.114342+00:00]>>>> utc.replace(days=+1)<Arrow [2017-02-04T13:47:58.114342+00:00]>>>> utc.replace(days=+1, hours=-1)<Arrow [2017-02-04T12:47:58.114342+00:00]>>>> utc.replace(weeks=+1)<Arrow [2017-02-10T13:47:58.114342+00:00]>
数据运算
Arrow对象可以通过简单的大于小于符合来判断时间先后,如:
>>> start = arrow.get('2017-02-03T15:47:58.114342+02:00')>>> end = arrow.get('2017-02-02T07:17:41.756144+02:00')>>> start<Arrow [2017-02-03T15:47:58.114342+02:00]>>>> end<Arrow [2017-02-02T07:17:41.756144+02:00]>>>> start > endTrue>>> start_to = start.to('+08:00')>>> start == start_toTrue
也可以通过’-‘运算符来获得时间的差值,如:
>>> start - enddatetime.timedelta(1, 30616, 358198)
时间区间
Arrow也可以根据时间来获取一个时间区间,如:
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc<Arrow [2017-02-03T13:47:58.114342+00:00]>>>> utc.span('hour')(<Arrow [2017-02-03T13:00:00+00:00]>, <Arrow [2017-02-03T13:59:59.999999+00:00]>)>>> utc.span('year')(<Arrow [2017-01-01T00:00:00+00:00]>, <Arrow [2017-12-31T23:59:59.999999+00:00]>)>>> utc.span('day')(<Arrow [2017-02-03T00:00:00+00:00]>, <Arrow [2017-02-03T23:59:59.999999+00:00]>)
也可以根据某个限定条件获取最大时间与最小时间,如:
>>> utc = arrow.get('2017-02-03T13:47:58.114342+00:00')>>> utc<Arrow [2017-02-03T13:47:58.114342+00:00]>>>> utc.floor('year')<Arrow [2017-01-01T00:00:00+00:00]>>>> utc.ceil('year')<Arrow [2017-12-31T23:59:59.999999+00:00]>>>> utc.floor('day')<Arrow [2017-02-03T00:00:00+00:00]>>>> utc.ceil('day')<Arrow [2017-02-03T23:59:59.999999+00:00]>
人性化
Arrow还提供了一些人性化比较时间的方式,humanize()方法,具体例子如下:
>>> earlier = arrow.utcnow().replace(hours=-2)>>> earlier.humanize()'2 hours ago'>>> later = later = earlier.replace(hours=4)>>> later.humanize(earlier)'in 4 hours'
阅读全文
0 0
- 【数据处理·Python】时间数据处理之Arrow库(转)
- Python之DataFrame数据处理
- python之数据处理小技巧
- 利用Python数据处理进行公交车到站时间预测(一)
- Python 数据处理
- Python数据处理
- python数据处理
- python数据处理
- python 数据处理
- python数据处理
- python数据处理
- Python 数据处理
- python地理数据处理库geopy
- kaggle入门(python数据处理)
- Python基础(七)- 数据处理
- 大数据处理之道(十分钟学会Python)
- 大数据处理之道(十分钟学会Python)
- Python之numpy教程(四):数据处理、绘图、数据统计分析
- 工具快捷键
- python之socket编程举例
- 解决log4cxx输出中文路径乱码问题
- [ JS 进阶 ] Repaint 、Reflow 的基本认识和优化
- 10版outlook主账户删不掉
- 【数据处理·Python】时间数据处理之Arrow库(转)
- Android学习之EventBus基础篇
- about 'Syntax error on token "Invalid Character", delete this token'
- C# 实现托盘,并显示气泡消息
- Android读取pdf文件及显示
- 新手入门,三言两语说编译:C和C++…
- JSP与Servlet的关系
- 三言两语说拷贝:深拷贝和浅拷贝
- 三言两语说new和malloc:new m…