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

本文详细介绍了Pandas的数据类型,如Series和DataFrame,包括创建、操作和索引。讲解了如何进行数据查询、编辑、算术运算、排序和统计分析,帮助读者掌握Pandas在数据分析中的核心技能。
摘要由CSDN通过智能技术生成

目录

前言

一、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

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

(2)创建Series时指定索引

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

>>> i=["a","c","d","a"]
>>> v=[2,4,5,7]
>>> t=pd.Series(v,index=i,name="col")
>>> print(t)
a    2
c    4
d    5
a    7
Name: col, dtype: int64
>>> t
a    2
c    4
d    5
a    7
Name: col, dtype: int64

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

>>> val=[2,3,5,6]
>>> idex1=range(10,14)
>>> idex2="hello the cruel world".split()
>>> s0=pd.Series(val)
>>> s0    #显示了index位置信息
0    2
1    3
2    5
3    6
dtype: int64
>>> s0.index
RangeIndex(start=0, stop=4, step=1)
>>> s0[0]
2
>>> s1=pd.Series(val,index=idex1)
>>> s1
10    2
11    3
12    5
13    6
dtype: int64
>>> print(s1.index)
RangeIndex(start=10, stop=14, step=1)
>>> t=pd.Series(val,index=idex2)
>>> t    #隐藏了index位置信息
hello    2
the      3
cruel    5
world    6
dtype: int64
>>> print(t.index)
Index(['hello', 'the', 'cruel', 'world'], dtype='object')
>>> print(s1[10])
2
>>> print('default:',t[0],'label:',t['hello'])
default: 2 label: 2

(4)通过字典创建Series

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

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

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

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

>>> sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
>>> obj1=pd.Series(sdata)
>>> obj1
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
>>> states=['Calofornia','Ohio','Oregon','Texas']
>>> obj2=pd.Series(sdata,index=states)
>>> obj2
Calofornia        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64
>>> obj1+obj2    #按相同索引自动加,只一个索引值为NAN
Calofornia         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64

(7)Series索引的修改

>>> obj=pd.Series([4,7,-3,2])
>>> obj
0    4
1    7
2   -3
3    2
dtype: int64
>>> obj.index=['张三','李四','王五','赵六']   
>>> obj    
张三    4
李四    7
王五   -3
赵六    2
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表示年初第一天
>>> import pandas as pd
>>> print(pd.date_range(start='20190601',end='20190630',freq='5D'))    #间隔五天
DatetimeIndex(['2019-06-01', '2019-06-06', '2019-06-11', '2019-06-16',
               '2019-06-21', '2019-06-26'],
              dtype='datetime64[ns]', freq='5D')
>>> print(pd.date_range(start='20190601',end='20190630',freq='W'))    #间隔一周
DatetimeIndex(['2019-06-02', '2019-06-09', '2019-06-16', '2019-06-23',
               '2019-06-30'],
              dtype='datetime64[ns]', freq='W-SUN')
>>> print(pd.date_range(start='20190601',periods=5,freq='2D'))    #间隔两天
DatetimeIndex(['2019-06-01', '2019-06-03', '2019-06-05', '2019-06-07',
               '2019-06-09'],
              dtype='datetime64[ns]', freq='2D')
>>> print(pd.date_range(start='20190601',periods=8,freq='2H'))    #2小时,8个数据
DatetimeIndex(['2019-06-01 00:00:00', '2019-06-01 02:00:00',
               '2019-06-01 04:00:00', '2019-06-01 06:00:00',
               '2019-06-01 08:00:00', '2019-06-01 10:00:00',
               '2019-06-01 12:00:00', '2019-06-01 14:00:00'],
              dtype='datetime64[ns]', freq='2H')
>>> print(pd.date_range(start='201906010300',periods=12,freq='T'))    #间隔一分钟
DatetimeIndex(['2019-06-01 03:00:00', '2019-06-01 03:01:00',
               '2019-06-01 03:02:00', '2019-06-01 03:03:00',
               '2019-06-01 03:04:00', '2019-06-01 03:05:00',
               '2019-06-01 03:06:00', '2019-06-01 03:07:00',
               '2019-06-01 03:08:00', '2019-06-01 03:09:00',
               '2019-06-01 03:10:00', '2019-06-01 03:11:00'],
              dtype='datetime64[ns]', freq='T')
>>> pd.date_range(start='20190101',end='20191231',freq='M')    #一月,月末最后一天
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')
>>> pd.date_range(start='20190101',periods=6,freq='A')    #间隔一年,年末最后一天
DatetimeIndex(['2019-12-31', '2020-12-31', '2021-12-31', '2022-12-31',
               '2023-12-31', '2024-12-31'],
              dtype='datetime64[ns]', freq='A-DEC')
>>> pd.date_range(start='20190101',periods=6,freq='AS')    #间隔一年,年初第一天
DatetimeIndex(['2019-01-01', '2020-01-01', '2021-01-01', '2022-01-01',
               '2023-01-01', '2024-01-01'],
              dtype='datetime64[ns]', freq='AS-JAN')

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

>>>data=pd.Series(index=pd.date_range(start='20190701',periods=24,freq='H'),data=range(24))
>>> print(data[:5])    #前5条数据
2019-07-01 00:00:00    0
2019-07-01 01:00:00    1
2019-07-01 02:00:00    2
2019-07-01 03:00:00    3
2019-07-01 04:00:00    4
Freq: H, dtype: int64
>>> print(data.resample('3H').mean())    #3分钟重采样,计算均值
2019-07-01 00:00:00     1.0
2019-07-01 03:00:00     4.0
2019-07-01 06:00:00     7.0
2019-07-01 09:00:00    10.0
2019-07-01 12:00:00    13.0
2019-07-01 15:00:00    16.0
2019-07-01 18:00:00    19.0
2019-07-01 21:00:00    22
  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值