作者:Zarten 知乎专栏:python数据分析与挖掘深入详解 知乎ID: Zarten 简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 !
概述
pandas作为数据分析强大的库,是基于numpy数组构建的,专门用来处理表格和混杂的数据。pandas中最主要的两个数据结构就是:Series和DataFrame。
接下来讲解Series和DataFrame的基础知识。
Series基础
Series结构是由一维numpy数据和与之相对应的索引组成。索引在左边,相对应的值在右边,若初始没有指定索引,则会自动创建从0开始的自然数索引。
创建Series对象
- 不指定索引创建
import
- 指定索引创建
有时候我们希望在初始时指定特定的索引,只需传入index参数即可
import
- 通过python字典创建
字典的键key即为Series对象的索引,值value即为Series对象的值
import
默认情况下,Series对象索引的顺序跟字典的顺序保持一致,但若想改变索引顺序,同样可以传入index参数。
从下面输出结果可以看到,索引顺序已经改变
import
若传入的index参数中,传入了字典中没有的键,会发生什么情况呢?
import
由上图,若传入没有的键,会显示NaN,表示是缺失值
获取Series对象数组及索引信息
使用Series对象的values和index方法即可
获取Series对象的一个或多个组值
可以通过索引的方式来获取。获取多个值时,传入的是一个列表
import
修改Series对象的索引和值
import
- 修改值
给相对应的索引赋值即可
- 修改索引
给Series对象的index属性重新赋值即可
Series对象的运算
可以进行numpy的运算,对numpy不熟悉的可以查阅前几篇文章。
import
若数组为相应的数字,则进行数值计算
import
Series对象的索引和值的name属性
指定索引的name属性,相当于索引的统称,同理值也是一样。这一name属性可以跟pandas的其他功能密切融合,以后会详细讲解。
zarten
DataFrame基础
DataFrame是一个表格型的数据结构,由行和列组成,分别有行索引和列索引,且每列可以是不同类型的值。
下面可以最直观感受DataFrame的结构,从下面可以看到,行索引和列索引都是自动创建,且从0开始
最直观感受DataFrame数据结构
import
创建DataFrame对象
创建的时候,可以通过参数index和columns分别指定行索引和列索引
1.传入一个numpy的多维数组对象
如上面那个例子
2.传入一个字典内部包含列表,字典内的列表是等长的
字典的key默认为列索引
import
3.传入一个嵌套字典
规则是:外层字典的key作为列,内层的key作为行
import
4.导入创建
通过外部文件导入来创建,比如csv,excel,mysql,其他数据库等。导入操作将在后面文章详细介绍,这里不作介绍。
5.创建方法汇总,如下图所示
获取DataFrame对象的行或列
import
- 获取某列
获取某列可以类似字典直接获取,获取的结果为一个Series对象
- 获取多列
跟上面同样的方法,只是将多个列索引名称组成一个列表形式
- 获取某行
通过DataFrame对象的loc属性进行获取
- 获取多行
同样使用loc属性,此时传入列表
修改DataFrame对象的行或列
切记:对于多行或多列,要使用列表形式的,可以通过下面的一些例子注意下
- 修改某列
跟获取某列相似,获取的同时赋值即可
- 修改多列
同样使用列表方式,赋值时也使用列表可以同时修改多列
- 修改某行
同理,修改某行同样是使用loc属性
- 修改多行
同样使用loc属性,赋值列表
- 若修改的行或列索引不存在的特殊情况
若在修改行或列的时候,指定的索引名称不存在,则会新增一行或一列。
通常新增行或列数据时可以使用此方法
PS:通过上面的例子,可以看到:其实所有的方法原理跟python的字典是类似的,所以只需记住python字典的用法,就很好理解了。
删除列或行
- 删除列
删除使用del,跟python中的del类似
- 删除行
删除行就跟之前不太一样了,使用DataFrame对象的drop方法。
drop方法有个参数inplace,若设置为True,则删除原始数据的行;默认为False,返回的结果是删除行了的,但原始的数据还是原封不动,没有被删除。
inplace参数为False的情况(默认为False)
inplace参数为True的情况
删除多行同样是使用列表形式
对DataFrame对象转置
转置:将行变成列,列变成行,跟numpy中一样,使用.T操作即可
注意:转置后的结果是一个副本,不会对原对象进行转置
import
DataFrame对象的索引和值的name属性
跟Series对象一样,也可指定行index和列columns的name属性名称