当前位置:   article > 正文

【python与数据分析】Pandas统计分析基础_pandas quantstats

pandas quantstats

目录

前言

一、pandas常用数据类型

综述

1.一维数组(Series)与常用操作

(1) 通过列表创建Series

(2)创建Series时指定索引

(3)Series位置和标签的使用

(4)通过字典创建Series

(5)键值和指定的索引不匹配

(6)不同索引数据的自动对齐

(7)Series索引的修改

2.时间序列与常用操作

(1)创建时间序列

(2)使用日期时间做索引,创建Series对象

(3)period_range生成时间序列

3.二维表格(DataFrame)与常用操作

(1)DataFrame的创建

(2)DataFrame创建时指定列名和索引

(3)DataFrame创建时的空缺值

(4)DataFrame的属性查询

4.索引对象

(1)显示DataFrame的索引和列

 (2)对DataFrame的索引和列的测试

二、pandas索引操作

1.重新索引(Series)

2.重新索引时填充缺失值(Series中)

3.缺失值的前后向填充(Series) 

4.重新索引(DateFrame中)

5.重新索引, 传入fill_value=n填充缺失值(DateFrame中)

6.reindex函数参数

7.更换索引set_index函数

三、DataFrame的数据查询与编辑

1.DataFrame的数据查询

(1)选取列

(2)选取行

(3)head,tail,sample方法选取行

(4)选取行和列

(5)布尔选择

2.DataFrame的数据的编辑

(1)增加数据

(2)删除数据

(3)修改数据

四、pandas数据运算

1.算数运算

(1)series相加

(2)DataFrame类型的数据相加

2.函数应用和映射

(1)将水果价格表中的“元”去掉

(2)apply函数与applymap函数的使用方法

3.排序

(1)Series的排序

(2)DataFrame的排序

4.汇总与统计

(1)数据汇总

(2)描述与统计分析


前言

  • 熟练掌握pandas一维数组series结构的使用
  • 熟练掌握pandas时间序列对象的使用
  • 熟练掌握pandas二维数组DataFrame结构的创建
  • 熟练掌握DataFrame结构中数据的选择与查看
  • 熟练掌握查看DataFrame结构中数据特征的方法
  • 数量掌握DataFrame结构的排序方法
  • 数量掌握DataFrame结构中数据的分组和聚合方法
  • 数量掌握DataFrame结构中异常值的查看与处理
  • 数量掌握DataFrame结构中缺失值的查看与处理
  • 数量掌握DataFrame结构重复值的查看与处理
  • 数量掌握DataFrame结构中数据差分的使用
  • 熟练掌握pandas提供的透视表与交叉表技术
  • 数量掌握DataFrame结构中数据的重采样技术

一、pandas常用数据类型

综述

        扩展库pandas是基于扩展库numpy和matplotlib的数据分析模块,是一个开源项目,提供了大量标准数据模型和高校操作大型数据集所需要的功能。可以说pandas是使得python能够称为高效且强大的数据分析行业首选语言的重要因素之一。

        扩展库pandas常用的数据结构有:

  • Series:带标签的一维数组
  • DatetimeIndex:时间序列
  • DateFrame:带标签且大小可变的二维表格结构

1.一维数组(Series)与常用操作

        Series是pandas提供的一维数组,由索引和值两部分组成,是一个类似于字典的结构。其中值的类型可以不同,如果在创建时没有明确指定索引则会自动使用从0开始的非零整数作为索引。

        格式:

(1) 通过列表创建Series

  1. >>> import pandas as pd
  2. >>> obj=pd.Series([1,-2,3,-4]) #仅有一个数组构成
  3. >>> obj
  4. 0 1
  5. 1 -2
  6. 2 3
  7. 3 -4
  8. dtype: int64

(2)创建Series时指定索引

        尽管创建Series指定了index参数,实际pandas还是有隐藏的index位置信息的。所以Series有两套描述某条数据的手段:位置和标签。

  1. >>> i=["a","c","d","a"]
  2. >>> v=[2,4,5,7]
  3. >>> t=pd.Series(v,index=i,name="col")
  4. >>> print(t)
  5. a 2
  6. c 4
  7. d 5
  8. a 7
  9. Name: col, dtype: int64
  10. >>> t
  11. a 2
  12. c 4
  13. d 5
  14. a 7
  15. Name: col, dtype: int64

(3)Series位置和标签的使用

  1. >>> val=[2,3,5,6]
  2. >>> idex1=range(10,14)
  3. >>> idex2="hello the cruel world".split()
  4. >>> s0=pd.Series(val)
  5. >>> s0 #显示了index位置信息
  6. 0 2
  7. 1 3
  8. 2 5
  9. 3 6
  10. dtype: int64
  11. >>> s0.index
  12. RangeIndex(start=0, stop=4, step=1)
  13. >>> s0[0]
  14. 2
  15. >>> s1=pd.Series(val,index=idex1)
  16. >>> s1
  17. 10 2
  18. 11 3
  19. 12 5
  20. 13 6
  21. dtype: int64
  22. >>> print(s1.index)
  23. RangeIndex(start=10, stop=14, step=1)
  24. >>> t=pd.Series(val,index=idex2)
  25. >>> t #隐藏了index位置信息
  26. hello 2
  27. the 3
  28. cruel 5
  29. world 6
  30. dtype: int64
  31. >>> print(t.index)
  32. Index(['hello', 'the', 'cruel', 'world'], dtype='object')
  33. >>> print(s1[10])
  34. 2
  35. >>> print('default:',t[0],'label:',t['hello'])
  36. default: 2 label: 2

(4)通过字典创建Series

  1. >>> sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
  2. >>> obj3=pd.Series(sdata) #字典的键直接成为索引
  3. >>> obj3
  4. Ohio 35000
  5. Texas 71000
  6. Oregon 16000
  7. Utah 5000
  8. dtype: int64

(5)键值和指定的索引不匹配

  1. >>> sdata={"a":100,"b":200,"e":300}
  2. >>> letter=["a","c","e"]
  3. >>> obj=pd.Series(sdata,index=letter)
  4. >>> type(obj)
  5. <class 'pandas.core.series.Series'>
  6. >>> print(obj) #以index为准,不匹配的值为NAN
  7. a 100.0
  8. c NaN
  9. e 300.0
  10. dtype: float64

(6)不同索引数据的自动对齐

  1. >>> sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
  2. >>> obj1=pd.Series(sdata)
  3. >>> obj1
  4. Ohio 35000
  5. Texas 71000
  6. Oregon 16000
  7. Utah 5000
  8. dtype: int64
  9. >>> states=['Calofornia','Ohio','Oregon','Texas']
  10. >>> obj2=pd.Series(sdata,index=states)
  11. >>> obj2
  12. Calofornia NaN
  13. Ohio 35000.0
  14. Oregon 16000.0
  15. Texas 71000.0
  16. dtype: float64
  17. >>> obj1+obj2 #按相同索引自动加,只一个索引值为NAN
  18. Calofornia NaN
  19. Ohio 70000.0
  20. Oregon 32000.0
  21. Texas 142000.0
  22. Utah NaN
  23. dtype: float64

(7)Series索引的修改

  1. >>> obj=pd.Series([4,7,-3,2])
  2. >>> obj
  3. 0 4
  4. 1 7
  5. 2 -3
  6. 3 2
  7. dtype: int64
  8. >>> obj.index=['张三','李四','王五','赵六']
  9. >>> obj
  10. 张三 4
  11. 李四 7
  12. 王五 -3
  13. 赵六 2
  14. dtype: int64

2.时间序列与常用操作

(1)创建时间序列

        时间序列对象一般使用pandas的date_range()函数生成,可以指定日期时间的起始和结束范围、时间间隔以及数据数量等参数,语法为:

        其中参数start和end分别用来指定起止日期时间;参数periods用来指定要生成的数据数量;参数freq用来指定时间间隔,默认为'D',表示相邻两个日期之间相差一天,更多取值和含义见:

http://pandas.pydata.org/pandasdocs/stable/user_guide/timeseries.html#timeseries-offset-aliases

        另外,pandas的Timestamp类也支持很多日期时间有关的操作。

  • start表示起始日期,end指定结束日期,periods指定生产的数据数量
  • freq指定间隔,D表示天,W表示周,H表示小时
  • M表示月末最后一天,MS表示月初第一天
  • T表示分钟,Y表示年末最后一天,YS表示年初第一天
  1. >>> import pandas as pd
  2. >>> print(pd.date_range(start='20190601',end='20190630',freq='5D')) #间隔五天
  3. DatetimeIndex(['2019-06-01', '2019-06-06', '2019-06-11', '2019-06-16',
  4. '2019-06-21', '2019-06-26'],
  5. dtype='datetime64[ns]', freq='5D')
  6. >>> print(pd.date_range(start='20190601',end='20190630',freq='W')) #间隔一周
  7. DatetimeIndex(['2019-06-02', '2019-06-09', '2019-06-16', '2019-06-23',
  8. '2019-06-30'],
  9. dtype='datetime64[ns]', freq='W-SUN')
  10. >>> print(pd.date_range(start='20190601',periods=5,freq='2D')) #间隔两天
  11. DatetimeIndex(['2019-06-01', '2019-06-03', '2019-06-05', '2019-06-07',
  12. '2019-06-09'],
  13. dtype='datetime64[ns]', freq='2D')
  14. >>> print(pd.date_range(start='20190601',periods=8,freq='2H')) #2小时,8个数据
  15. DatetimeIndex(['2019-06-01 00:00:00', '2019-06-01 02:00:00',
  16. '2019-06-01 04:00:00', '2019-06-01 06:00:00',
  17. '2019-06-01 08:00:00', '2019-06-01 10:00:00',
  18. '2019-06-01 12:00:00', '2019-06-01 14:00:00'],
  19. dtype='datetime64[ns]', freq='2H')
  20. >>> print(pd.date_range(start='201906010300',periods=12,freq='T')) #间隔一分钟
  21. DatetimeIndex(['2019-06-01 03:00:00', '2019-06-01 03:01:00',
  22. '2019-06-01 03:02:00', '2019-06-01 03:03:00',
  23. '2019-06-01 03:04:00', '2019-06-01 03:05:00',
  24. '2019-06-01 03:06:00', '2019-06-01 03:07:00',
  25. '2019-06-01 03:08:00', '2019-06-01 03:09:00',
  26. '2019-06-01 03:10:00', '2019-06-01 03:11:00'],
  27. dtype='datetime64[ns]', freq='T')
  28. >>> pd.date_range(start='20190101',end='20191231',freq='M') #一月,月末最后一天
  29. DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
  30. '2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
  31. '2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
  32. dtype='datetime64[ns]', freq='M')
  33. >>> pd.date_range(start='20190101',periods=6,freq='A') #间隔一年,年末最后一天
  34. DatetimeIndex(['2019-12-31', '2020-12-31', '2021-12-31', '2022-12-31',
  35. '2023-12-31', '2024-12-31'],
  36. dtype='datetime64[ns]', freq='A-DEC')
  37. >>> pd.date_range(start='20190101',periods=6,freq='AS') #间隔一年,年初第一天
  38. DatetimeIndex(['2019-01-01', '2020-01-01', '2021-01-01', '2022-01-01',
  39. '2023-01-01', '2024-01-01'],
  40. dtype='datetime64[ns]', freq='AS-JAN')

(2)使用日期时间做索引,创建Series对象

  1. >>>data=pd.Series(index=pd.date_range(start='20190701',periods=24,freq='H'),data=range(24))
  2. >>> print(data[:5]) #前5条数据
  3. 2019-07-01 00:00:00 0
  4. 2019-07-01 01:00:00 1
  5. 2019-07-01 02:00:00 2
  6. 2019-07-01 03:00:00 3
  7. 2019-07-01 04:00:00 4
  8. Freq: H, dtype: int64
  9. >>> print(data.resample('3H').mean()) #3分钟重采样,计算均值
  10. 2019-07-01 00:00:00 1.0
  11. 2019-07-01 03:00:00 4.0
  12. 2019-07-01 06:00:00 7.0
  13. 2019-07-01 09:00:00 10.0
  14. 2019-07-01 12:00:00 13.0
  15. 2019-07-01 15:00:00 16.0
  16. 2019-07-01 18:00:00 19.0
  17. 2019-07-01 21:00:00 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/897704
推荐阅读
相关标签
  

闽ICP备14008679号