前言

在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律。Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器。

1、生成日期序列

主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间、结束时间、生成时期的数目及时间频率(freq='M'月,'D'天,‘W',周,'Y'年)等。

两种主要区别在于pd.date_range()生成的是DatetimeIndex格式的日期序列;pd.period_range()生成的是PeriodIndex格式的日期序列。

以下通过生成月时间序列和周时间序列来对比下:

date_rng = pd.date_range('2019-01-01', freq='M', periods=12)

print(f'month date_range():

{date_rng}')

"""

date_range():

DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',

'2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',

'2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],

dtype='datetime64[ns]', freq='M')

"""

period_rng = pd.period_range('2019/01/01', freq='M', periods=12)

print(f'month period_range():

{period_rng}')

"""

period_range():

PeriodIndex(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06',

'2019-07', '2019-08', '2019-09', '2019-10', '2019-11', '2019-12'],

dtype='period[M]', freq='M')

"""

date_rng = pd.date_range('2019-01-01', freq='W-SUN', periods=12)

print(f'week date_range():

{date_rng}')

"""

week date_range():

DatetimeIndex(['2019-01-06', '2019-01-13', '2019-01-20', '2019-01-27',

'2019-02-03', '2019-02-10', '2019-02-17', '2019-02-24',

'2019-03-03', '2019-03-10', '2019-03-17', '2019-03-24'],

dtype='datetime64[ns]', freq='W-SUN')

"""

period_rng=pd.period_range('2019-01-01',freq='W-SUN',periods=12)

print(f'week period_range():

{period_rng}')

"""

week period_range():

PeriodIndex(['2018-12-31/2019-01-06', '2019-01-07/2019-01-13',

'2019-01-14/2019-01-20', '2019-01-21/2019-01-27',

'2019-01-28/2019-02-03', '2019-02-04/2019-02-10',

'2019-02-11/2019-02-17', '2019-02-18/2019-02-24',

'2019-02-25/2019-03-03', '2019-03-04/2019-03-10',

'2019-03-11/2019-03-17', '2019-03-18/2019-03-24'],

dtype='period[W-SUN]', freq='W-SUN')

"""

date_rng = pd.date_range('2019-01-01 00:00:00', freq='H', periods=12)

print(f'hour date_range():

{date_rng}')

"""

hour date_range():

DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 01:00:00',

'2019-01-01 02:00:00', '2019-01-01 03:00:00',

'2019-01-01 04:00:00', '2019-01-01 05:00:00',

'2019-01-01 06:00:00', '2019-01-01 07:00:00',

'2019-01-01 08:00:00', '2019-01-01 09:00:00',

'2019-01-01 10:00:00', '2019-01-01 11:00:00'],

dtype='datetime64[ns]', freq='H')

"""

period_rng=pd.period_range('2019-01-01 00:00:00',freq='H',periods=12)

print(f'hour period_range():

{period_rng}')

"""

hour period_range():

PeriodIndex(['2019-01-01 00:00', '2019-01-01 01:00', '2019-01-01 02:00',

'2019-01-01 03:00', '2019-01-01 04:00', '2019-01-01 05:00',

'2019-01-01 06:00', '2019-01-01 07:00', '2019-01-01 08:00',

'2019-01-01 09:00', '2019-01-01 10:00', '2019-01-01 11:00'],

dtype='period[H]', freq='H')

"""

2、生成Timestamp对象及转换

创建一个Timestamp时间戳对象有pd.Timestamp()方法和pd.to_datetime()方法。如下所示:

ts=pd.Timestamp(2019,1,1)

print(f'pd.Timestamp()-1:{ts}')

#pd.Timestamp()-1:2019-01-01 00:00:00

ts=pd.Timestamp(dt(2019,1,1,hour=0,minute=1,second=1))

print(f'pd.Timestamp()-2:{ts}')

#pd.Timestamp()-2:2019-01-01 00:01:01

ts=pd.Timestamp("2019-1-1 0:1:1")

print(f'pd.Timestamp()-3:{ts}')

#pd.Timestamp()-3:2019-01-01 00:01:01

print(f'pd.Timestamp()-type:{type(ts)}')

#pd.Timestamp()-type:

#dt=pd.to_datetime(2019,1,1) 不支持

dt=pd.to_datetime(dt(2019,1,1,hour=0,minute=1,second=1))

print(f'pd.to_datetime()-1:{dt}')

#pd.to_datetime()-1:2019-01-01 00:01:01

dt=pd.to_datetime("2019-1-1 0:1:1")

print(f'pd.to_datetime()-2:{dt}')

#pd.to_datetime()-2:2019-01-01 00:01:01

print(f'pd.to_datetime()-type:{type(dt)}')

#pd.to_datetime()-type:

#pd.to_datetime生成自定义时间序列

dtlist=pd.to_datetime(["2019-1-1 0:1:1", "2019-3-1 0:1:1"])

print(f'pd.to_datetime()-list:{dtlist}')

#pd.to_datetime()-list:DatetimeIndex(['2019-01-01 00:01:01', '2019-03-01 00:01:01'], dtype='datetime64[ns]', freq=None)

#时间戳转换为period月时期

pr = ts.to_period('M')

print(f'ts.to_period():{pr}')

#ts.to_period():2019-01

print(f'pd.to_period()-type:{type(pr)}')

#pd.to_period()-type:

3、生成period对象及转换

#定义时期period

per=pd.Period('2019')

print(f'pd.Period():{per}')

#pd.Period():2019

per_del=pd.Period('2019')-pd.Period('2018')

print(f'2019和2018间隔{per_del}年')#可以直接+、-整数(代表年)

#2019和2018间隔1年

#时期转换为时间戳

print(per.to_timestamp(how='end'))#2019-12-31 00:00:00

print(per.to_timestamp(how='start'))#2019-01-01 00:00:00

4、生成时间间隔Timedelta

#生成时间间隔Timedelta

print(pd.Timedelta(days=5, minutes=50, seconds=20, milliseconds=10, microseconds=10, nanoseconds=10))

#5 days 00:50:20.010010

#获取当前时间

now=pd.datetime.now()

#计算当前时间往后50天的日期

dt=now+pd.Timedelta(days=50)

print(f'当前时间是{now}, 50天后时间是{dt}')

#当前时间是2019-06-08 17:59:31.726065, 50天后时间是2019-07-28 17:59:31.726065

#只显示年月日

print(dt.strftime('%Y-%m-%d'))#2019-07-28

5、重采样及频率转换

#asfreq 按季度显示索引值

#'DatetimeIndex' object has no attribute 'asfreq'

date=pd.date_range('1/1/2018', periods=20, freq='D')

tsdat_series=pd.Series(range(20),index=date)

tsp_series=tsdat_series.to_period('D')

print(tsp_series.index.asfreq('Q'))

date=pd.period_range('1/1/2018', periods=20, freq='D')

tsper_series=pd.Series(range(20),index=date)

print(tsper_series.index.asfreq('Q'))

"""

PeriodIndex(['2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1',

'2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1',

'2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1', '2018Q1',

'2018Q1', '2018Q1'],

dtype='period[Q-DEC]', freq='Q-DEC')

"""

#resample 按季度统计并显示

print(tsdat_series.resample('Q').sum().to_period('Q'))

"""

2018Q1 190

Freq: Q-DEC, dtype: int64

"""

#groupby 按周进行汇总求平均值

print(tsdat_series.groupby(lambda x:x.weekday).mean())

"""

0 7.0

1 8.0

2 9.0

3 10.0

4 11.0

5 12.0

6 9.5

dtype: float64

"""

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: python Pandas库基础分析之时间序列的处理详解

本文地址: http://www.cppcns.com/jiaoben/python/265342.html

python时间序列库_python Pandas库基础分析之时间序列的处理详解相关推荐

  1. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  2. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  3. python dataframe 列_python pandas库中DataFrame对行和列的操作实例讲解

    用pandas中的DataFrame时选取行或列: import numpy as np import pandas as pd from pandas import Sereis, DataFram ...

  4. python3中datetime库,time库以及pandas中的时间函数区别与详解

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  5. python hook 微信_python实现微信跳一跳辅助工具步骤详解

    说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...

  6. python sqlsever 时间_Python sqlalchemy时间戳及密码管理实现代码详解

    一.时间戳 实际开发中,我们一般希望create_time和update_time这两个属性能自动设置,所以在建表的时候需要在model上特殊处理一下: from sqlalchemy.sql imp ...

  7. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

  8. python内存池_python内存监控工具memory_profiler和guppy的用法详解

    python内存监控工具memory_profiler和guppy的用法详解 发布时间:2020-08-21 19:44:58 来源:脚本之家 阅读:123 python2.7在内存管理上相比pyth ...

  9. python 元组拆包_Python元组拆包和具名元组解析实例详解

    前言 在Python中元组是一个相较于其他语言比较特别的一个内置序列类型.有些python入门教程把元组成为"不可变的列表",这种说法是不完备的,其并没有完整的概括元组的特点.除了 ...

  10. python比例图_python在地图上画比例的实例详解

    现在用python画图已经难不倒一直跟小编学习的小伙伴们了,甚至有的小伙伴画图比小编还要厉害.为此小编还偷偷下了一番功夫,画图这种事情,细节上的完善肯定能让图片更加好看.所以小编知道大家会画地图,但是 ...

最新文章

  1. 基于YOLOV5的数据集标注&训练,Windows/Linux/Jetson Nano多平台部署全流程
  2. 九十一、动态规划系列 背包问题之混合背包
  3. js上传视频,预览视频
  4. struts2中Action名称的搜索顺序
  5. Elasticsearch核心知识图谱
  6. 都安排上了!春晚主持阵容、春晚直播平台、春晚餐桌C位
  7. 以太坊源码(03):POA委员会选举机制
  8. 刘知远:NLP研究入门之道(二)走近NLP学术界
  9. Guava - Collections - Immutable collections
  10. C 风格字符串,C++string类,MFC,CString类的区别。
  11. font-family常见中文字体对应的英文名称
  12. git config配置
  13. android 3d翻转动画 viewpage,利用ViewPager实现3D画廊效果及其图片加载优化
  14. webpack中loader和plugin的区别
  15. mysql中如何复制数据表_MySQL中快速复制数据表方法汇总
  16. Java网络编程笔记(三):点对点通信(Socket基于TCP协议)
  17. Android之实现手写电子签名
  18. MySQL数据清理有技巧,这么破
  19. 国产积木---克尔维特(多图流量预警)
  20. 在github上下载的.md文件怎么打开

热门文章

  1. 【心电信号】基于matlab瞬时抑制心电信号IIR滤波【含Matlab源码 1533期】
  2. 【图像边缘检测】基于matlab拉普拉斯算法图像边缘检测与增强【含Matlab源码 456期】
  3. 【三维路径规划】基于matlab蚁群算法三维路径规划【含Matlab源码 179期】
  4. 【TSP】基于matlab模拟退火算法求解旅行商问题【含Matlab源码 136期】
  5. python坐标系教程_python Shapely使用指南详解
  6. 求一个数因数个数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  7. nginx php 慢,Nginx+PHP-FPM时快时慢的解决
  8. NULL 与 nullptr区别与联系
  9. BZOJ 1801 中国象棋(DP)
  10. mgo02_mongodb启动警告处理