当前课程知识点:计算思维与人工智能基础 > 第三部分:python基础 > 第八章:python生态库 > 8.10第三方库-pandas库
下面我们给大家介pandas第三方库
pandas是基于NumPy的一种工具
该工具为了解决数据分析任务而创建的
pandas纳入了大量库和一些标准的数据模型
提供了高效的操作大型数据集所需要的工具
pandas是python一个数据分析包
提供了大量能使我们快速便捷的处理数据的函数和方法
它是python成为强大而高效的数据分析环境的重要因素之一
下面我们给大家介绍pandas常用的两种数据结构
Series和DataFrame Series是一种类似于一维数组的对象
他有一组数据
那么可以使各种NumPy的数据类型以及
一组与之相关的数据标签或者是索引组成
仅有一组数据即可产生最简单的Series
我们看下面这段代码
我们首先导入pandas
那么通过Series的方法呢
可以创建一个Series对象
那么给一个列表就可以创造一个Series这样对象
那么我们可以看到它它会自动生成一组
索引0123这就是Series的这个对象这样的一个数据结构
另外的一个就是我们的DataFrame
DataFrame是一个表格型的数据结构
它还有一组有序的列
每列可以是不同的值类型
是数值型字符串型或者布尔值等都可以
那么DataFrame具有行索也有列索引
它可以看作Series组成的这个字典
把这些字典的可以共用同一个索引
跟其他类似的数据结构比如说
在R语言中DataFrame是相近的
DataFrame中面向行和面向列的操作基本上是平衡的
其实呢DataFrame中的数据是以一个或者多个二维快存放的
而不是列表字典或者别的一维数据结构
我们来看这个如何来去构建一个DataFrame对象的
那么最常用的是直接传入有一个等长的表
或者是NumPy数组组成了这样的一个词典
我们来看右边这段代码
我们通过一个创建一个data这样的一个字典类的数据对象
可以看的到间是一个字符串
而值是有一个列表组成的
我们看stateyearpop分别都是由后面的值都是有列表组成的
那么通过我们pdDataFrame这个方法就可以创建一个
DataFrame对象
他们创建了以后呢
我们可以看的到他的这个刚才我们在这个数据里面的字典
的键在这个地方就是我们列的索引名称
那么他们共用行的一个索引
那么这个DataFrame会自动生成
加上这个行索引
那么这个切这个全部列会被有序的排列是这样的一个过程
那么另外常见的一种创建的方式就是通过
是嵌套字典的方式来去创建
我们创建一个pop这样的一个字典的这个数据类型
那么可以看到这个键给一个Nevada的这样键
能不能里面的值呢又是一个字典
那么这个里面键值键值这样的组成
这个我们pop的通过DataFrame创建一个frame的一个对象
他出来的结果我们可以看的到
如果将传给DataFrame她就会被
刚才这个嵌套字典传进去后
他就会外层字典的键值就作为列
我们可以看外层的字典这个Nevada和ohoi
那么这个是可以作为我们列的索引
那么里面的字典嵌套字典里面的键作为内层的索引
他能相当于作为行的这样的一个索引
DataFrame中的columns跟字典键相比有一个明显不同
就是其顺序是可以被规定的
那我们在Series也好或者是在
DataFrame这样的数据结构对象里面
我们都可以进行一些基本的一些操作
比如说可以做一些重新索引还有切片排序统计
还有合并以及缺失值的处理等等这样工作
下面我们就给大家介绍常用的几个方法
也就是我们基本功能的使用
首先我们来看重新索引
pandas对象的一个重要的方法就是reindex
它的作用就是创建一个适应新索引的新对象
且调用Seriesr的eindex将会根据新索引进行重排
如果某个索引值当前不存在呢他就引入缺失
我们来看下面这段代码
首先制定一个Seriesr对象ab我们传进来的一个列表
2345给了一个指定的一个索引
是ABCD
我们不指定会默认的会生成的索引是0123
那么这指定了索引的话他就ABCD
好了我们想给他重新索引
那么将建立另外一个对象呢
就通过reindex那么在这个里面的
我们可以看到来把这个索引
给他加了一个e
那么在显示这个reindex的时候这个Seriesr对象的时候
他可以看的到他们值是没有变的
只是我们索引多了一个e那么e这个时候没有给值的
所以他就引入这个缺失值就是一个NaN这样子的值
更改列名
DataFrame更改列名最灵活的方式是使用remane函数
你可以传入一个字典那么其中keys就是原名values是新列名
还可以指定axis这个值
那么现在我们可以看到创建一个DataFrame对象
那么这个列名分别是col空格y和col空格two
那么现在要我们想把这个列名修改的话
就可以引用df.rename那么这时旧得列名
后面的这个传入个字典值是新列名
这是旧的列名那么它我们可以看
那么显示一下我们这个更改后df对象
我们来看他的列名作为一个修改
也可以直接用df.columns我们付给新的列名
可以看的到这个df
df他的列名所以就可以修改了
切片那么在这个切片里面呢
主要有两种方法
一种是loc以标签索引iloc是以下标索引来进行切片
我们来看一个例子
dates通过pd.date这个方法来生成一个行索引
行索引也是一个日期型
periods是6
也就是说他会生成六个索引
就是连续的六个
我们通过DataFrame来创建一个D,F这样的对象
生成六行四列这样的一个数组
那么给索引呢
我们可以看到index指的是行索引
那么展示一下她的结果呢
可以直接用前面的df也可以df.head就是从前开始
第几条一共六条
我们就展示6也可以
那么这个也是可以从后面展示几条
展示出来呢他的结果就是这样啊
这个是ABCD指标的值是通过
我们前面讲过的他的随机生成的这个数据
他们就是这个随机生成的这个数据呢
我们可以看得到通过我们的DataFrame
是这样去展示
如果我们现在想把它切片呢
loc是以标签索引来协调我们来看一看
我们df.loc前面这个方括号里面是切片
前面指的是行后面是列
那么行索引冒号全部就是缺少那么列索引
我们这里面是A和B
所以我们展示出来的结果我们行是全部显示的
列值显示A和B把这两列
那么如果使用iloc的话就是用下标
我们可以看得到这个iloc的话
那么也是左开右闭的原则
就是从第三行和第四行第五行不包括
那么列
那么这个三四就是这样啊
我们可以看01234啊
那么就是这个其实是第四行和第五行这个展示
这就是一个切片的功能
咱们切片后我们可以给它赋值
修改我们这个整个切片的这个某一个是某一块的
这个值都是可以实现的
另外的一个基本的功能就是排序
根据条件对数据集排序
那么这个用的方法就是这个sorting
对值进行排序
我们也来看看它的使用
我们首先可以看的到
我们刚才还是刚才我们那个df这个数据对象
我们按照这个sort-indexaxis=1 0是行1是列
那么对列进行排列
是指的是我们的升序还是降序
我们可以看到了刚才是哪1920190111这条数据在上面
那么他就做了一个降序的排列
那么还可以对某一列的值进行排列
比如说我们这个
是对于我们这款第C列的值来进行排列
那么如果也是按降序的话
我们可以谈执行以后可以看到第C列的值
那么索引为C的这列的值呢
他都是什么按降序进行排序
那么这个就是基本的排序功能
另外还有一些什么汇总和计算描述的功能
pandas对象拥有一组常用的数学和统计方法
常用的是用到常用的sum mean 这样子的
那他们大部分都属于简约或者是汇总的统计
其实就是用于从Series提取一个值或者从DataFrame
我们的行或列中提取一个Series
比如说我们刚才还是对我们的DF前面定义的这个
DataFrame这个对象的进行求点mean的话
这个方法求的就是每一列的一个平均值
我们来看如果我们通过nprendom.randint那么就是从10-20
取15个这样子的整数
产生这样一个Series对象S的时候
我们首先输出这个值
然后下面可以通过
来计算这个值里面的
就是他的每一个他是10的频率是多少
11的频率是多少
最后我们可以Smode来找出我们频率最大的那个数据
那么可以看这是他的生成的结果
0-14分别生成的我们是十到二十的数据
这是我们S出来的结果
下面的我们是要把他的这个值进行统计
这个出来的时候就是每一个数
每一个这个值
最后输出最大的那个
频率最高的那个SM的是最高的这个输出的数值
这就是可以通过一些求和呀平均值啊
计数的一些常用的统计的功能啊
另外的话
他还会提供一个describe这样的一个方法
那么这个方法呢
是它可以用于一次性的产生多个汇总的统计
我们也是对刚才我们这个df这个对象的进行
应用一个describe的方法
那么describe的方法
那么它产生的结果就是这样子的
她会有八行分别第一行时
我们一共计数一共有多少个
多少行那么有六个
六行那么技术就是六
那mean就是每一列的平均值
那么STD时每一列的标准差
那么min是每一列的最小值
在下面就是第一四分位的值
第二四分位的值
第三四分位数和最大的值都是对列的一个统计
这样的话这个就是一个一看就是一个多个的汇总
总体在我们使用数据的时候
对数据总体的一个概况的一个统计
通过describe不是很好的可以表现出来
下面我们给大家介绍pd.merge方法和concat方法的使用
首先我们来看merge的合并操作
我们来看这个例子
我们通过pd.DataFrame来创建一个left
它的列索引是key里面的值是up
另外一个列索引是lval
我们另外一个DataFrame对象
那么key down和up另外一个列索引是rval
那么如果我们想把他们合并的话
他们有一个共同的键是key
所以我们可以on是他们共同的键
把他进行合并合并后呢
那我们可以看的到那么他的索引行索引还是01
那么key这一行up的值lval的值s是1rval是4
一样down的时候呢
就把它合到一起
像当时与我们做了一个表的连接
两个表结构的一个连接
另外我们再看一个例子
我们看创建于framelDataFrame对象
framel2这样的一个对象
那么同比分别有ABC三个列索引
另外framel2里面有ACAD的索引
那这两个我们看相同的值就可以通过merge把他合并
那么on就是我们按照哪一个什么列索引合并
那么按照这个a这一列合并成这样
另外一个就是concat的方法的连接的使用
那么连接的使用的话我们也看一个例子
我们通过DataFramenp.ones生成一个
全部是一的这样的一个三行四列的这样的一个数
我们乘以零那么其实就是零的这样乘以一乘二
那么它的列索引分别是ABCD
我们输出这我们创建的Datadf1df2df3
我们可以看到是这样子的
那么如果把它做一个连接的时候呢
它可以按照可以做一个concat
刚才我们的df1df2连接起来
那么axis是1的时候呢
这个是我们的按照列进行合并
ignore这个索引只给true
他是需要重建的索引重建索引重建的话
就按照我们合并后的连接后的来进行重建
按列经行连接原来是0到3列
然后4到7列
8到11列把他连接着
那么这个他们的索引我们这个就是重建
另外一个如果是axis选0的话按行进行重建
那么这样相当于把一个按行
把我们的df1df2df3构成新的一个df.
这样的一个过程
这个就是merge和concat的一个使用
另外就是我们缺失值的处理啊
那么怎么样去处理缺失值呢
我们主要用的这个方法是
我们可以说dropna其实就是删除我们这个缺失值
fillna是填充那么这个dropna是可以按照我们
比如说我们要全部的所有的含这个空值的
都把他删除的话就这样子
后面括号里面是缺省的
我们也可以指定预知
比如说我们案例
然后列方向是三个的才去删除这一项的
那么也可以是将那个全部相都是nan的
来删除这一行来制定不同的预知
fillna就是填充
那么填充可以全部都填充里
他们也可以是对某一列的这个nan来填
那么就说第一列
付一个0那么第二列的0.5
那么也可以用这个ffill这个参数来指定前一个是只作为
列方向上前一个只作为他的填充值
给他进行差值或者是指定值来进行填充
那后面这两个idnull和notnull
其实就是判断这个这个对象是不是就有空值的
当然也返回一个布尔值
对于我们在实际应用中的即使是对于缺失的数据呢
我们一般的是不滤过那么通常的方法其实要去补充它的
那么补充的话我们大部分都是用通过
fillna这个方法来进行补充的
我们也是看右边这个例子这是我们用的这个数据
是我们前面我们创建这个df对象DataFrame对象
那么这个DataFrame对象我们现在呢
要给他建一个重新的索引
reindex我们的行号呢
是从零到三就是这四行columns
是原来的列号就加了一个e
这样的一个索引
那么这个columnse的这个索引的话
那么就说建了索引而我没有值的话
这个地方应该都是空的
但是我们可以通过切片负值
行坐标是1.2这两行标号为1.2这两行
那么这个列是e列
这个位置的值给他付为二
这是第零行第一行和第二行
那么这个值是给付了二他们展示出来的
我们剩下的这个nan的值
我若想填充的话可以通过
fillna这个函数来给他填
那么也可以通过我们指定的前面讲过指定的
某一列填成什么样的值都是可以操作
最后我们介绍一下关于pd,csv关于文件的操作
它可以通过我们readCSV这个方法来
对CSV的文件里的数据进行读取
可以通过一些参数
比如说encoding参数来可以读取带中文这个编码的一些文件
index-col如果是0的话把这个我们的行索引给他去掉
那么显示前四行我们读进来
这个文件显示前四行就是这样
我们也可以把我们的DataFrame对象
把它写到我们指定的CSV文件里
可以通过点to下杠CSV这个方法来写到指定的CSV文件
那么这个前面介绍的就是关于pandas我们常用的一些方法
那当然还有一些其他的方法
大家可以在下面去自己去学习好的
我们今天的课就到这
-章测试
-章测试
-第一章:python简介
--章测试
-第二章:编码规范
--2.2常量和变量
--章测试
-第三章:数据类型
--章测试
-第四章:基本运算
--4.2比较运算符
--4.3逻辑运算符
--4.4位运算符
--章测试
-第五章:程序控制结构
--5.1顺序结构
--5.2条件结构
--5.3循环结构
--5.4跳转结构
--5.5异常处理
--章测试
-第六章:函数、模块与面向对象
--6.2面向对象
--6.4模块与包
--章测试
-第七章:文件操作
--7.2文件的写入
--章测试
-第八章:python生态库
--章测试
-第九章:TensorFlow基础
--章测试
-第十章:实例分析与实践
--章测试
-第十一章:人工智能在自然语言中的应用
--章测试