接着上一回说到的时序分析,上一回主要是学习了datetime库和pandas.to_datetime模块。

今天我们要学习的是resample,这一讲的内容很多,也有很多有意思的东西。

老规矩,用到的资料来源于pandas.DataFrame.resample - pandas 0.24.2 documentation​pandas.pydata.org

参考书Wes McKinney著的Python for Data Analysis,中文名叫《利用python进行数据分析》

在开始resample之前,我觉得有必要介绍一个模块data_range,在介绍data_range之前,我想补充一下datetime的格式说明哇,这个被压缩的好厉害

这个格式也是format最常用的。当然需要牢记。

好的,我们开始data_range的学习

老规矩,先看一下data_range的参数使用

pandas.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False,

name=None, closed=None, **kwargs)date_range常用的几个参数

这里我就主要介绍一下常用的参数

1:start 这个参数是时间索引的起始时间

2:end 自然这个参数是结束的时间

3:period ,如果你只使用了起始或结束的时间戳,那么就需要使用period来告知一个范围

4:freq 这个是frequency的缩写,也就是频率,这个是一个非常重要的参数,可以通过设置这个参数得到自定义的时间频率

官方文档为这些频率做了一个说明,我就直接复制下来了官方文档给出的解释,这里是常用的基础单词,我就不翻译了

还有两张图片我相信各位看官都能看懂,我就不班门弄斧了多不多,我觉得我已经go die了

光看上面的图片,我觉得很容易就晕掉了,我们来看一看具体的例子,我敬重的考研名师宇哥说过“数无形时少直觉”那么我们用实际的例子去解决上面的问题。

因为昨天学了datetime模块,所以我这里就自己结合了datetime

首先先导入需要以及可能用到的库

import pandas as pd

import numpy as np

from datetime import datetime

下一步使用不同的采集方式

pd.date_range(start=datetime.now(), periods=5, freq='B')输出结果

让我们分析分析这个语句,首先start=datetime.now(),这个语句的意思是获取当前的时间,

而period=5的意思是获得5个时间点,如果没有后面的freq,则默认的是获得天数。我们可以在执行一条语句

pd.date_range(start=datetime.now(), periods=5)注意看这里的freq='D'这是模块默认的

那么这两个语句的区别在于freq,第一个设置freq='B' 根据上面表格里面的内容,B = Business day 也就是工作日,可以看到第一个的输出结果就是显示的就是从明天开始的5个工作日。

再来看一个例子

pd.date_range(start='20130809',periods=8,freq='SM')这里我使用了freq='SM'

SM=semi-month end frequency(15th and end of month)也即是取每月的15号和当月的最后一天,比如29,28,30,31

当然还可以举很多的例子,但是后面就是重复的过程了,所以我就不继续下去了,我下面将会做两个时间频率叠加的操作

请看

pd.date_range(start=datetime.now(),periods=5,freq='2h20min')请注意这里的freq

这里的freq我使用的2h20min,也就是2小时20分钟,也即140分钟,所以输出结果里面写明了freq=140T,其中T就是minutes频率的表示,我们同样可以直接在此处使用freq=140T

pd.date_range(start=datetime.now(),periods=5,freq='140T')可以看到效果是一样的

我们在看一个例子

pd.date_range(start='20190623', periods=10, freq='1D10U')可以看到这里的输出结果是多了1天10微秒

这一点在实际中用到的情况还算是比较多的。

总结一下,其实这一部分非常的常用,所以还是需要熟知的,至于其他的时间,实际工作或者学习的时候遇到了,可以直接去查找官方的文档,Time Series / Date functionality​pandas.pydata.org

可以直接查阅上面的这个链接然后查询

下面我们将会对重新采样和频率转换(resample)做一个基本的了解

同样的老规矩先上链接pandas.Series.resample - pandas 0.24.2 documentation​pandas.pydata.org

resample这个模块有两类--1:pandas.Series.resample, 2:pandas.DataFrame.resample

常规操作先看一下resample这个模块的参数

Series.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',

kind=None, loffset=None, limit=None, base=0, on=None, level=None)

在介绍参数之前,我想先说明一下什么是重新采样:重新采样是值将时间序列从一个频率转换为另一个频率的过程,将更高频率的数据聚合到低频率被称为向下采样,而从低频率转换为高频率被称为向上采样,但是好有一种是同频之间的切换,比如W-WED(weekly on Wednesday 每周三)转换到W-FRI(每周五)

好的讲清楚了,下面看一下参数参数如图

话说知乎压缩图片也太夸张了吧。。。。

好吧,凑合着看吧,下面我们把上面几个参数按照导图的形式表示出来

下面我将围绕上面的几个参数举几个例子

先生成几个时间

index = pd.date_range('1/1/2000',periods=9,freq='T')

series = pd.Series(range(9),index=index)

series执行结果

这个时间是按照1分钟为频率生成的,下面我要向下采集以3分钟为频率,并把时间戳的合计值放在一个bin(可以翻译为箱子)里面

series.resample('3T').sum()执行结果

下面的几个例子都是处理closed和label这几个参数的,为了更好地对比,我先把上面这个例子的参数的默认值表示出来

series.resample('3T')执行结果

各位看官可以注意这里面的默认值,closed和label都是left,那么我改变一下closed和label的值会发生什么呢?

series.resample('3T',label='right').sum()执行结果

可以发现和第一个相比较第二个的第一个重采集执行数据是03而不是00,所以这个就是两者的区别

我们在看一下,加入closed的情况

series.resample('3T',label='right',closed='right').sum()执行结果

可能上面几个例子不是很直观,那么这里可以引入loffset,来讲索引移动一定的数量,如从右边缘减去一秒,

series.resample('3T',label='right',

closed='right',loffset='-1s').sum()执行结果

series.resample('3T',loffset='-1s').sum()执行结果

series.resample('3T',label='right',loffset='-1s').sum()执行结果

到这里向下采集也有很多朋友称为降频率就结束了,下一步就是升频率

向上采集的时候可能会出现很多空值,

series.resample('30S').asfreq()[0:5]执行结果

我们可以使用asfreq方法,在不聚合的情况下转换到高频率。

而对于出现的空值,我们可以使用fillna,和reindex的方法填充和插值方法

插值的时候可以使用ffill,bfill,pad等方式

series.resample('30S').pad()[0:5]执行结果

series.resample('30S').ffill()[0:5]执行结果

series.resample('30S').bfill()[0:5]执行结果

可以看到ffill是插入相邻的上一个数据,bfill是插入相邻的下一个数据,而pad好像执行结果和ffill是一样的,我找了很久也没收到这个是什么操作,由于周末时间不早了,这个就先留一个坑,下一次在补上吧。

好的到这里今天的时序就算结束了,虽然还有金融常用的OHLC以及移动窗口函数,但是这个对于我来讲暂时还用不到,等真的用到的时候再回来看吧。

好的,总结一下:今天主要是学了如何生成一个想要的时间频率的数据,以及如何重新采集时间。

希望这篇文章能够给予同为菜鸟的看官以帮助。

好的,我今天就不求赞了,拖得太久了。。。。

python resample函数_python时序分析之重采集(resample)相关推荐

  1. python 抽样函数_python中resample函数实现重采样和降采样代码

    函数原型 resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='s ...

  2. python describe函数_Python基础知识点梳理2,推荐收藏

    接着昨天的基础知识点继续梳理,昨天的 Python基础知识梳理1 8.函数 1.定义函数: 使用关键字def来告诉python你要定义一个函数 接着指出函数名:如下面函数名是-greet_user ( ...

  3. python递增文件名_Python实现批量重命名

    最近在网络上下载了一部漫画,漫画是图片形式的,下载下来后才发现每一张漫画图片的文件名都是没有规律且又长又复杂的,想要把它们改成按数字递增规律的,一个一个去改文件名工作量太大,浪费太多时间,于是心想用P ...

  4. python not函数_python 函数

    1 为什么使用函数 在没有接触函数时,有时候需要将一个功能多次写,如果需要修改其中一个变量,则需要把所有实现该功能的代码一处一处改.不利于代码维护,代码量大了,组织结构也会很不清晰. 所以总结不使用函 ...

  5. python include函数_python 库函数

    python的内建函数和库函数的区别是什么? [区别]:标准库函数都需要import xxx才能取得.内建函数都在__builtins__里面,在global里直接就能用. [补充]:1.python ...

  6. python islower函数_python字符串是否是小写-python 字符串小写-python islower函数-python islower函数未定义-嗨客网...

    Python字符串是否是小写教程 在开发过程中,有时候我们需要判断一个 Python islower()函数详解 语法 str.islower() -> bool 参数 参数 描述 str 表示 ...

  7. python agg函数_Python Pandas Series.agg()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas Series.agg()用 ...

  8. python findall函数_python正则表达式之中的findall函数是什么?

    在这篇文章之中我们来了解一下关于python正则表达式的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于正则表达式中的pyt ...

  9. python log函数_Python log10() 函数

    Python log10() 函数 描述 log10() 方法返回以10为基数的x对数. 语法 以下是 log10() 方法的语法:import math math.log10( x ) 注意:log ...

最新文章

  1. 网络推广外包——企业委托网络推广外包公司提高网站流量和访问量
  2. mysql数据库更新表_Mysql数据库(四)表记录的更新操作
  3. shell基本运算符
  4. android wsdl封装,《android 解析WebService》
  5. 题目1089:数字反转(简单数字转换)
  6. OpenVINO Inference Engine之LoadNetwork
  7. java jndi tomcat_tomcat下jndi的三种配置方式
  8. 三台服务器的时间同步-Linux
  9. MyEclipse激活步骤
  10. DeepWalk学习
  11. 佳易王收银管理软件和扫码通M800大部分扫码支付平台对接步骤:
  12. 80G倾斜正射多光谱数据、谷歌影像、各种遥感数据下载
  13. ElasticSearch系列之什么是ElasticSearch?
  14. 算法设计与分析 —— 排列问题
  15. UCI机器学习库和一些相关算法
  16. 《缠中说禅108课》15:没有趋势,没有背驰
  17. MySql 报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains....
  18. 选择startup公司的一点经验
  19. r语言平均值显著性检验_R语言标记显著性标记
  20. Unity RPG 黑暗之光 问题记录 上 (1-63 地形场景 角色选择 行走 相机跟随、旋转、缩放 任务系统 面板栏 背包系统 状态系统)

热门文章

  1. Android之用adb命令快速获取手机IP方法总结
  2. LeetCode之Number Complement
  3. linux之解决在ubuntu上面打开window文件乱码问题总结
  4. Android之Eclipse下面如何看Android源代码
  5. Android之调用js常见错误
  6. android模拟器无法拍照,为什么dafault相机无法在android模拟器中工作?
  7. java jdk实现快速排序_Java实现快速排序过程分析
  8. 40张令人震惊的对比图,第一张细思恐极
  9. python eval函数_Python eval 函数妙用
  10. linux读写usb host,LINUX下USB1.1设备学习小记(3)_host与device