0
点赞
收藏
分享

微信扫一扫

第3章 数据分析工具Pandas

刘员外__ 2022-03-11 阅读 74
数据分析

本章使用的包:

import numpy as np
import pandas as pd

 一,Pandas的数据结构分析Pandas的数据结构分析:

1,Pandas中有两个主要的数据结构:

Series(一维的数据结构)

DataFrame(二维的、表格型的数据结构)

2,Series是一个类似一维数组的对象,它能够保存任何类型的数据,主要由一组数据和与之相关的索引两部分构成

注意:Series的索引位于左边,数据位于右边

3,创建Series

1),基本公式:

data:表示传入的数据。

index:表示索引,唯一且与数据长度相等,默认会自动创建一个从0~N的整数索引。

2),通过传入一个列表,字典来创建一个Series类对象

3),为了能方便地操作Series对象中的索引和数据,所以该对象提供了两个属性indexvalues分别进行获取

 4),当某个索引对应的数据进行运算以后,其运算的结果会替换原数据,仍然与这个索引保持着对应的关系

4,创建DataFrame类

1),DataFrame是一个类似于二维数组或表格(如excel)的对象,它每列的数据可以是不同的数据类型。

注意:

DataFrame的索引不仅有行索引,还有列索引,数据可以有多列

2),基本公式

pandas.DataFramedata = Noneindex = Nonecolumns = None,dtype = None,copy = False 

index:表示行标签。若不设置该参数,则默认会自动创建一个从0~N的整数索引。

columns:列标签。

3),创建DataFrame类对象

 4)获取数据

使用列索引的方式来获取列数据,返回的结果是一个Series对象

访问属性的方式来获取列数据,返回的结果是一个Series对象

 总结:在获取DataFrame的一列数据时,推荐使用列索引的方式完成,主要是因为在实际使用中,列索引的名称中很有可能带有一些特殊字符(如空格),这时使用“点字符”进行访问就显得不太合适了。

5),DataFrame增加,删除一列数据

 二,Pandas索引操作及高级索引

1,pd中的索引都是Index类对象

Index类对象,又称为索引对象,该对象是不可以进行修改的,以保障数据的安全

 2,reindex()方法

该方法的作用是对原索引和新索引进行匹配,也就是说,新索引含有原索引的数据,而原索引数据按照新索引排序。

 3,reindex()方法的语法格式

1), imethod:插值填充方式。

          index:用作索引的新序列。

          fill_value:引入缺失值时使用的替代值。

          limit:前向或者后向填充时的最大填充量。

2),如果不想填充为NaN,则可以使用fill_value参数来指定缺失值

3),如果期望使用相邻的元素值进行填充,则可以使用method参数,该参数对应的值有多个 

 4),获取数据

 5),切片

 6),不连续索引

 7),布尔型索引

 8),loc   iloc索引

loc:基于标签索引(索引名称),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。

iloc:基于位置索引(整数索引),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引

三,算术运算与数据对

1,Pandas执行算术运算时,会先按照索引进行对齐,对齐以后再进行相应的运算,没有对齐的位置会用NaN进行补齐。

 2,如果希望不使用NAN填充缺失数据,则可以在调用add方法时提供fill_value参数的值,fill_value将会使用对象中存在的数据进行补充

四, 数据排序

1,按索引排序使用的是sort_index()

1),公式

axis:轴索引,0表示index(按行),1表示columns(按列)。

level:若不为None,则对指定索引级别的值进行排序。

ascending:是否升序排列,默认为True表示升序。


2), 按索引对 Series 进行分别排序

3), 按索引对DataFrame进行分别排序

2,按值排序的方法为sort_values()

1),公式

 by参数表示排序的列,

na_position参数只有两个值:first和last,若设为first,则会将NaN值放在开头;若设为False,则会将NaN值放在最后

 2),按值的大小对Series进行排序

DataFrame中,sort_values()方法可以根据一个或多个列中的值进行排序,但是需要在排序时,将一个或多个列的索引传递给by参数才行

 

 

五, 统计计算与描述

1,基本方法(常用的统计计算

 2,describe()方法

如果希望一次性输出多个统计指标,则我们可以调用describe()方法实现

percentiles:输出中包含的百分数,位于[0,1]之间。如果不设置该参数,则默认为[0.25,0.5,0.75],返回25%,50%,75%分位数。

六,层次化索引

1,概念

前面所涉及的Pandas对象都只有一层索引结构,又称为单层索引,层次化索引可以理解为单层索引的延伸,即在一个轴方向上具有多层索引

对于两层索引结构来说,它可以分为内层索引和外层索引。

SeriesDataFrame均可以实现层次化索引,最常见的方式是在构造方法的index参数中传入一个嵌套列表。

data = pd.Series([15848,13472,12073.8,7813,7446,6444,15230,8269],
                  index=[['河北省','河北省','河北省','河北省','河南省',
                  '河南省','河南省','河南省'],['石家庄市','唐山市','邯郸市',
                  '秦皇岛市','郑州市','开封市','洛阳市','新乡市']])

在创建层次化索引对象时,嵌套函数中两个列表的长度必须是保持一致的,否则将会出现ValueError错误。

2,MultiIndex类的方法构建一个层次化索引

将包含若干个元组的列表转换为MultiIndex对象

MultiIndex.from_tuples():将元组列表转换为MultiIndex。

MultiIndex.from_arrays():将数组列表转换为MultiIndex。

MultiIndex.from_product():从多个集合的笛卡尔乘积中创建一个MultiIndex。

 3,from_tuples()方法

包含若干个元组的列表转换为MultiIndex对象

list_tuples = [('A','A1'), ('A','A2'), ('B','B1'),('B','B2'), ('B','B3')]
# 根据元组列表创建一个MultiIndex对象
multi_index = MultiIndex.from_tuples(tuples=list_tuples, 
                        names=[ '外层索引', '内层索引'])

 4,from_arrays()方法

数组列表转换为MultiIndex对象,其中嵌套的第一个列表将作为外层索引,嵌套的第二个列表将作为内层索引

multi_array = MultiIndex.from_arrays(arrays =[['A', 'B', 'A', 'B', 'B'], 
                                    ['A1', 'A2', 'B1', 'B2', 'B3']],
                                    names=['外层索引','内层索引'])

5,from_product()方法

从多个集合的笛卡尔乘积中创建一个MultiIndex对象

numbers = [0, 1, 2]
colors = ['green', 'purple']
multi_product = pd.MultiIndex.from_product(iterables=[numbers, colors], 
						   names=['number', 'color'])

(xxx)认识层次化索引

在数学中,两个集合XY的笛卡尓积,又称直积,表示为× Y,第一个对象是X的成员,而第二个对象是Y的所有可能有序对的其中一个成员 

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}

6,层次化索引的操作

从左边数第1列的数据表示书籍的类别,第2列的数据表示书籍的名称,第3列的数据表示书籍的销售数量。其中,1列作为外层索引使用,第2列作为内层索引使用

1),根据书籍统计表,创建一个具有多层索引的Series对象,示例如下:

ser_obj = Series([50, 60, 40, 94, 63, 101, 200, 56, 45],
                            index=[['小说', '小说', '小说',
                                          '散文随笔', '散文随笔', '散文随笔',
	                     	      '传记', '传记', '传记'],
	                    	     ['高山上的小邮局', '失踪的总统', '绿毛水怪',
	                     	      '皮囊', '浮生六记', '自在独行',
	                     	      '梅西', '老舍自传', '库里传']])

 2),如果商城管理员需要统计小说销售的情况,则可以从表中筛选出外层索引标签为小说的数据

# 获取所有外层索引为“小说”的数据
ser_obj['小说']

 3),假设当前知道书名为“自在独行”,但所属的类别和销售数量并不清楚,需要操作内层索引获取该书籍的类别与销售数量

# 获取内层索引对应的数据
ser_obj[:,'自在独行']

 4),交换分层顺序是指交换外层索引和内层索引的位置。

7,swaplevel()方法

Pandas中,交换分层顺序的操作可以使用swaplevel()方法来完成。

# 交换外层索引与内层索引位置
ser_obj.swaplevel()

 8,sort_index()方法

要想按照分层索引对数据排序,则可以通过sort_index()方法实现

sort_index(axis = 0,level = None,ascending = True,inplace = False,kind =' quicksort ',na_position ='last',
sort_remaining = True,by = None )

by:表示按指定的值排序。

ascending:布尔值,表示是否升序排列,默认为True。

 1),在使用sort_index()方法排序时,会优先选择按外层索引进行排序,然后再按照内层索引进行排序。

 七,读写数据操作

 

 

 1,to_csv()方法

to_csv()方法的功能是将数据写入到CSV文件中

1,公式

 path_or_buf:文件路径。

index:默认为True,若设为False,则将不会显示索引。

sep:分隔符,默认用“,”隔开。

2,read_csv()函数

read_csv()函数的作用是将CSV文件的数据读取出来,转换成DataFrame对象展示。

1,公式

 sep:指定使用的分隔符,默认用“,”分隔。

header:指定行数用来作为列名。

names:用于结果的列名列表。如果文件不包含标题行,则应该将该参数设置为None。 

3,text文件

Text格式的文件也是比较常见的存储数据的方式,后缀名为".txt",它与上面提到的CSV文件都属于文本文件。

如果希望读取Text文件,既可以用前面提到的read_csv()函数,也可以使用read_table()函数

4,注意

read_csv()与read_table()函数的区别在于使用的分隔符不同,前者使用“,”作为分隔符,而后者使用“\t”作为分隔符。

Excel文件也是比较常见的存储数据的文件,它里面均是以二维表格的形式显示的,可以对数据进行统计、分析等操作。Excel的文件扩展名有.xls.xlsx两种。

5,读写Excel文件

1),to_excel()方法的功能是将DataFrame对象写入到Excel工作表中

 excel_writer:表示读取的文件路径。

sheet_name:表示工作表的名称,默认为“Sheet1”。

na_rep:表示缺失数据。

index:表示是否写行索引,默认为True。

2)read_excel()函数的作用是将Excel中的数据读取出来,转换成DataFrame展示

io:表示路径对象。

sheet_name:指定要读取的工作表,默认为0。

header:用于解析DataFrame的列标签。

names:要使用的列名称。

 3),对于网页中的表格,可以使用read_html()函数进行读取,并返回一个包含多个DataFrame对象的列表

io:表示路径对象。

header:表示指定列标题所在的行。

index_col:表示指定行标题对应的列。

attrs:默认为None,用于表示表格的属性值

6,读写数据库

Pandasio.sql模块中提供了常用的读写数据库函数

 1),在连接mysql数据库时,这里使用的是mysqlconnector驱动,如果当前的Python环境中没有改模块,则需要使用pip install mysqlconnector命令安装该模块。

2),read_sql()函数既可以读取整张数据表,又可以执行SQL语句

sql:表示被执行的SQL语句。

con:接收数据库连接,表示数据库的连接信息。

columns:从SQL表中选择列名列表。

3),通过create_engine()函数创建连接时,需要指定格式如下:'数据库类型+数据库驱动名称://用户名:密码@机器地址:端口号/数据库名'

4),to_sql()方法的功能是将SeriesDataFrame对象以数据表的形式写入到数据库中

 name:表示数据库表的名称。

con: 表示数据库的连接信息。

if_exists:可以取值为fail、replace或append,默认为’fail’。

八,总结

本章主要针对Pandas库的基础内容进行了介绍,包括常用的数据结构、索引操作、算术运算、数据排序、统计计算与描述、层次化索引和读写数据操作等,并结合北京高考分数线的分析案例,讲解如何使用Pandas操作数据。

通过对本章的学习,希望大家可以用Pandas实现简单地操作,为后续深入地学习打好扎实的基础。

举报

相关推荐

0 条评论