时间序列:

关键函数

pandas.date_rangestart = Noneend = Noneperiods = Nonefreq = Nonetz = Nonenormalize = Falsename = Noneclosed = None** kwargs 

参数:

start:str或datetime-like,可选

生成日期的左边界。

end:str或datetime-like,可选

生成日期的权利。

periods:整数,可选

要生成的周期数。

freq:str或DateOffset,默认为'D'(每日日历)

频率串可以有倍数,例如'5H'。

tz:str或tzinfo,可选

返回本地化DatetimeIndex的时区名称,例如“Asia / Hong_Kong”。默认情况下,生成的DatetimeIndex是暂时的。

normalize:bool,默认为False

在生成日期范围之前将开始/结束日期标准化为午夜。

name:str,默认无

生成的DatetimeIndex的名称。

closed:{无,'左','右'},可选

使间隔相对于给定频率关闭到“左”,“右”或两侧(无,默认)。

** kwargs

为了兼容性。对结果没有影响。

返回固定频率DatetimeIndex。

时间序列生成的几种方式和采样:

 from datetime import datetime # 导入时间序列^M...: t1 = datetime(2009,10,20) # 直接定义...:...:In [105]: t1
Out[105]: datetime.datetime(2009, 10, 20, 0, 0)In [106]: # 通过列表^M...: date_list = [^M...:     datetime(2018,10,1),^M...:     datetime(2018,10,2),^M...:     datetime(2018,10,5),^M...:     datetime(2018,10,7)^M...: ]In [107]: date_list
Out[107]:
[datetime.datetime(2018, 10, 1, 0, 0),datetime.datetime(2018, 10, 2, 0, 0),datetime.datetime(2018, 10, 5, 0, 0),datetime.datetime(2018, 10, 7, 0, 0)]In [108]: s1 = Series(np.random.randn(4),index=date_list) # 给时间序列赋In [109]: s1
Out[109]:
2018-10-01    0.433032
2018-10-02   -1.180358
2018-10-05   -1.583058
2018-10-07   -1.200917
dtype: float64In [110]: s1.values
Out[110]: array([ 0.43303189, -1.1803582 , -1.58305798, -1.20091707])In [111]: s1.index
Out[111]: DatetimeIndex(['2018-10-01', '2018-10-02', '2018-10-05', '2018-10-07'], dtype='datetime64[ns]', freq=None)In [112]: # 快速生成时间序列:pd.date_rangeIn [113]: data_list_new = pd.date_range('2018-01-01',periods=100,freq='H') # 默认是从周日开始In [114]: len(data_list_new)
Out[114]: 100In [115]: s2 = Series(np.random.rand(100),index=data_list_new)In [116]: s2.head()
Out[116]:
2018-01-01 00:00:00    0.891556
2018-01-01 01:00:00    0.953536
2018-01-01 02:00:00    0.321705
2018-01-01 03:00:00    0.150378
2018-01-01 04:00:00    0.180122
Freq: H, dtype: float64In [117]: t_range = pd.date_range('20180101','20181231')In [118]: t_range
Out[118]:
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04','2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08','2018-01-09', '2018-01-10',...'2018-12-22', '2018-12-23', '2018-12-24', '2018-12-25','2018-12-26', '2018-12-27', '2018-12-28', '2018-12-29','2018-12-30', '2018-12-31'],dtype='datetime64[ns]', length=365, freq='D')In [119]: s1 = Series(np.random.randn(len(t_range)),index=t_range)In [120]: s1.head()
Out[120]:
2018-01-01    0.442134
2018-01-02    1.726818
2018-01-03   -1.157719
2018-01-04    1.179449
2018-01-05    0.974630
Freq: D, dtype: float64In [121]: # 对时间序列采样In [122]: s1['2018-01'].mean()
Out[122]: 0.03117062119001378In [123]: s1_month = s1.resample('M').mean() #按月进行采样In [124]: s1_month.index
Out[124]:
DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30','2018-05-31', '2018-06-30', '2018-07-31', '2018-08-31','2018-09-30', '2018-10-31', '2018-11-30', '2018-12-31'],dtype='datetime64[ns]', freq='M')In [125]: s1.resample('H').bfill().head()
Out[125]:
2018-01-01 00:00:00    0.442134
2018-01-01 01:00:00    1.726818
2018-01-01 02:00:00    1.726818
2018-01-01 03:00:00    1.726818
2018-01-01 04:00:00    1.726818
Freq: H, dtype: float64

数据分箱技术Binning:

pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')

该函数的用处是把分散的数据化为分段数据,例如学生的分数,从0到100分,可以分为(0,59],(60,79],(80,90],(90,100],还有就是年龄也可以分段,因此该函数就是为此而生的,同时返回的还是原始数据,只是已经是分箱过的数据,同时可以添加新标签,下面给出例子:

把学生分数分箱

In [1]: import numpy as np^M...: import pandas as pd^M...: from pandas import Series,DataFrame...:...:In [2]: score_list = np.random.randint(0,100,size=100) # 随机创建100个学生分数,分数从0    # 到100 In [3]: score_list
Out[3]:
array([56, 80, 89,  3, 45, 56, 65, 48, 12, 20, 13, 37,  1, 85, 64, 50, 72,43,  8, 15,  9, 16, 63, 41, 68, 98,  2, 18, 78, 83, 54, 90, 81, 64,98, 48, 52, 67,  1,  7, 24, 98, 83, 57, 57, 36, 90, 48, 59, 72,  4,8,  2, 26, 16, 91, 26,  9, 66, 92, 22,  3, 91, 72, 90, 28, 74, 88,89, 79, 13, 91, 57, 98, 63, 68, 63, 73, 33, 33, 99, 55, 18, 87, 60,53, 24, 77, 85, 70, 57, 58, 75, 86, 88, 43, 52,  4, 71, 16])In [4]: bins = [0,59,79,89,100] # 分数分段区间即0,59],(60,79],(80,90],(90,100]In [5]: score_cut = pd.cut(score_list,bins) # 通过pd.cut()函数把分数按照bins进行分割In [18]: len(score_cut)  # 返回还是100个分数,只是这些分数已经分箱了,可以添加标签等
Out[18]: 100In [6]: score_cut # 返回的数据类型为pandas.core.arrays.categorical.Categorical
Out[6]:
[(0, 59], (79, 89], (79, 89], (0, 59], (0, 59], ..., (0, 59], (0, 59], (0, 59], (59, 79], (0, 59]]
Length: 100
Categories (4, interval[int64]): [(0, 59] < (59, 79] < (79, 89] < (89, 100]]In [7]: type(score_cut)
Out[7]: pandas.core.arrays.categorical.CategoricalIn [8]: pd.value_counts(score_cut) # 查看每个区间的人数
Out[8]:
(0, 59]      54
(59, 79]     22
(89, 100]    12
(79, 89]     12
dtype: int64
# 为后续处理做准备

Dataframe数据进行分箱

还是引用上面的数据进行实践

In [9]: df = DataFrame() # 创建一个空Dataframe数据In [10]: df['score_list'] = score_list # 把数据填充进去In [11]: df.head() # 查看前5行
Out[11]:score_list
0          56
1          80
2          89
3           3
4          45In [12]: df['name'] = [pd.util.testing.rands(3) for i in range(100)]...: # pandas提供pd.util.testing.rands()函数 随机生成字符串作为学生姓名并填充进去In [13]: df.head() # 显示前5个人的数据
Out[13]:score_list name
0          56  puk
1          80  VUL
2          89  cwz
3           3  uVb
4          45  sRNIn [14]: # 把分箱结果作为一个columnsIn [15]: # 把分箱结果作为一个columns,并把分数段分等级:low,0k,good,greatIn [16]: df['Categories'] = pd.cut(df['score_list'],bins,labels=['low','ok','g...: ood','great'])In [17]: df.head(10)
Out[17]:score_list name Categories
0          56  puk        low
1          80  VUL       good
2          89  cwz       good
3           3  uVb        low
4          45  sRN        low
5          56  3vM        low
6          65  wp8         ok
7          48  lSF        low
8          12  AkT        low
9          20  tgb        low

分组技术GroupBy

DataFrame.groupbyby = Noneaxis = 0level = Noneas_index = Truesort = Truegroup_keys = Truesqueeze = Falseobserve = False** kwargs 

该函数的主要处理分组问题,例如从数据中有两个特征感兴趣,可以单独拿出来供我们处理,例如:

 date    city    temperature wind
0   03/01/2016  BJ  8   5
1   17/01/2016  BJ  12  2
2   31/01/2016  BJ  19  2
3   14/02/2016  BJ  -3  3
4   28/02/2016  BJ  19  2
5   13/03/2016  BJ  5   3
6   27/03/2016  SH  -4  4
7   10/04/2016  SH  19  3
8   24/04/2016  SH  20  3
9   08/05/2016  SH  17  3
10  22/05/2016  SH  4   2
11  05/06/2016  SH  -10 4
12  19/06/2016  SH  0   5
13  03/07/2016  SH  -9  5
14  17/07/2016  GZ  10  2
15  31/07/2016  GZ  -1  5
16  14/08/2016  GZ  1   5
17  28/08/2016  GZ  25  4
18  11/09/2016  SZ  20  1
19  25/09/2016  SZ  -10 4

从数据中我们看到主要有四个城市的天气记录,只是通过这个表格我们不容易处理数据,例如各城市的均值和最大值、最小值、画图等,以此可以针对‘city’进行分组,然后对其处理,再利用分组后的属性对数据进一步处理,其中一些属性有:

gb.median     gb.ngroups    gb.plot       gb.rank       gb.std        gb.transform
gb.aggregate  gb.count      gb.cumprod    gb.dtype      gb.first      gb.groups     gb.hist       gb.max        gb.min        gb.nth        gb.prod       gb.resample   gb.sum        gb.var
gb.apply      gb.cummax     gb.cumsum     gb.fillna     gb.gender     gb.head       gb.indices    gb.mean       gb.name       gb.ohlc       gb.quantile   gb.size       gb.tail       gb.weight

从中我们可以看出有很多属性函数给我们处理数据,还具有画图功能,下面给出具体数据处理代码示例:


In [59]: import numpy as np...: import pandas as pd...: from pandas import Series,DataFrame...:...:In [60]: df = pd.read_csv('city_weather.csv')In [61]: df.head()
Out[61]:date city  temperature  wind
0  03/01/2016   BJ            8     5
1  17/01/2016   BJ           12     2
2  31/01/2016   BJ           19     2
3  14/02/2016   BJ           -3     3
4  28/02/2016   BJ           19     2In [62]: gb = df.groupby(df['city'],) # 以城市为准分组,可分为BJ,GZ,SH,SZg.<tab> # 有很多属性可用gb.agg        gb.boxplot    gb.cummin     gb.describe   gb.filter     gb.get_group  gb.height     gb.last       gb.median     gb.ngroups    gb.plot       gb.rank       gb.std        gb.transform
gb.aggregate  gb.count      gb.cumprod    gb.dtype      gb.first      gb.groups     gb.hist       gb.max        gb.min        gb.nth        gb.prod       gb.resample   gb.sum        gb.var
gb.apply      gb.cummax     gb.cumsum     gb.fillna     gb.gender     gb.head       gb.indices    gb.mean       gb.name       gb.ohlc       gb.quantile   gb.size       gb.tail       gb.weightIn [65]: gb.groups # 组成员和每组的索引
Out[65]:
{'BJ': Int64Index([0, 1, 2, 3, 4, 5], dtype='int64'),'GZ': Int64Index([14, 15, 16, 17], dtype='int64'),'SH': Int64Index([6, 7, 8, 9, 10, 11, 12, 13], dtype='int64'),'SZ': Int64Index([18, 19], dtype='int64')}In [67]: gb.get_group('BJ').mean() # 获得BJ的temperature和wind的均值
Out[67]:
temperature    10.000000
wind            2.833333
dtype: float64In [69]: gb.max()
Out[69]:date  temperature  wind
city
BJ    31/01/2016           19     5
GZ    31/07/2016           25     5
SH    27/03/2016           20     5
SZ    25/09/2016           20     4gb.plot()

其他功能参考pandas官方文档

pandas数据处理实践四(时间序列date_range、数据分箱cut、分组技术GroupBy)相关推荐

  1. 数据科学入门与实战:玩转pandas之七数据分箱技术,分组技术,聚合技术

    首先导入相关包 import pandas as pd import numpy as np from pandas import Series,DataFrame #数据分箱技术Binning 数据 ...

  2. 数据分箱技术在Python中实现

    1 数据分箱 数据分箱技术在Pandas官方给出的定义:Bin values into discrete intervals,是指将值划分到离散区间.好比不同大小的苹果归类到几个事先布置的箱子中:不同 ...

  3. 数据预处理 -----数据分箱

    一.定义 数据分箱(Binning)作为数据预处理的一部分,也被称为离散分箱或数据分段.其实分箱的概念其实很好理解,它的本质上就是把数据进行分组. 分箱就是把数据按特定的规则进行分组,实现数据的离散化 ...

  4. python数据预处理——数据分箱(将值归类)

    数据分箱的常用案例便是:根据成绩分为不及格.及格.良.优秀 示例 无标签 import pandas as pdvalue_list = [10, 20, 30.4, 59, 61, 79, 80, ...

  5. 数据挖掘:银行评分卡制作——数据分箱、WOE、IV的意义

    在银行评分卡的项目中,通常都会需要把数据分箱,分箱后并不是对数据进行哑变量处理,而是用WOE值去替换,再放入模型中. 学习的过程中会对这些操作有些疑问,比如,数据分箱有什么意义,WOE和IV值是干什么 ...

  6. python分箱统计个数_使用python 计算百分位数实现数据分箱代码

    对于百分位数,相信大家都比较熟悉,以下解释源引自百度百科. 百分位数,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.可表示为:一组n个观测值 ...

  7. 数据分箱技术Binning

    数据分箱技术Binning 数据分箱技术Binning 引入相关库 数据获取 数据分箱 数据分箱技术Binning 引入相关库 import numpy as np import pandas as ...

  8. 数据科学猫:数据预处理 之 数据分箱(Binning)

    进击的橘子猫正式改名上线啦! 我的CSDN主页:https://blog.csdn.net/Orange_Spotty_Cat 也欢迎大家搜索微信公众号"进击的橘子猫",我也会定期 ...

  9. python卡方分箱_机器学习(十六)特征工程之数据分箱

    1 分箱简介 数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,是一种将多个连续值分组为较少数量的"分箱"的方法. 例如,例如我们有一组关于人年龄的 ...

最新文章

  1. LeetCode简单题之Excel表列名称
  2. 【Linux】Linux服务器(centos7)环境搭建java/python3/nginx
  3. python路径怎么找windows_如何查看 windows 中 Python安装路径
  4. Java 11功能– Java飞行记录器
  5. Nutanix在中国市场发布多云合作伙伴计划
  6. js提取正则中的字符串
  7. 小学认识计算机硬件ppt,认识计算机硬件课件.ppt
  8. 面向切面编程AspectJ在Android埋点的实践
  9. Android 2048游戏开发
  10. JAVA学习之网络编程UDP篇
  11. wordpress无法建立目录 是否上级目录没有写权限?解决办法
  12. 机器人视觉手眼标定学习笔记
  13. 【无线安全】Kali 暴力破解 WiFi 密码步骤详解
  14. 外贸术语 交货条件(zt)
  15. 济南出台5G专项规划,十年布局5G基站18万处
  16. android系统构建系统_构建系统简介
  17. php 2038,php在2038年后datetime类也无法获得当前日期的解决
  18. 图形学基础 真假位移(法线贴图、凹凸贴图和位移贴图、向量位移贴图的对比与区别)
  19. python中的面向对象(教学式讲解)
  20. iTest(APP性能测试:CPU、Mem、网络等)使用方法

热门文章

  1. [PBRT-V3]怎么对比不同渲染算法的效果
  2. 《深度学习》李宏毅 -- task6卷积神经网络
  3. Hadoop——HDFS(2)
  4. 网络通讯技术在嵌入式系统中的应用
  5. python字符串常用函数-Python字符串常用函数详解
  6. linux安装python_如何在 Windows 上安装 Python | Linux 中国
  7. java中如何直接导入println()
  8. linux 提取重复数据处理,Linux提取命令cut
  9. 数据解决方案:原力大数据教你如何撰写数据分析报告
  10. php面试专题---6、正则表达式考点