Pandas 是一种基于 NumPy 的开源的数据分析和处理工具包,提供了高性能、简单易用的数据结构和数据分析函数。Pandas提供了方便的类表格和类SQL的操作,同时提供了强大的缺失值处理方法,通过Pandas可以方便的进行数据导入、选取、清洗、处理、合并、统计分析等操作。
Python标准库中默认不包含 Pandas,需要自己下载安装:
- 命令行安装 pip install pandas
- 借助于第三方包管理软件,例如Anaconda
Series对象的创建
Pandas 中的 Series 对象可以理解为带有标签数据的一维数组,标签在Pandas中有对应的数据类型“Index”,Series类似于一维数组与字典的结合。
创建Series时,可通过index参数指定索引,未指定索引时,采用默认索引,从0开始,不断递增;创建Series的主要方式如下:
- 通过列表、元组创建:索引大小必须和列表大小一致;
- 通过numpy的ndarray创建:必须是一维数组,且数组大小和索引大小要一致;
- 通过字典创建:默认索引为字典的关键字,指定索引时,会以索引为键获取值,没有值时,默认为NaN;
- 通过标量创建 :重复填充标量到每个索引上;
values 属性获取具体值,类型为一维ndarray;可通过index 属性获取相应索引,类型为Index;
Index对象介绍
Pandas 的 Index 对象可以看作是一个不可变数组,Index 对象中可以包含重复值。可直接通过Pandas中的Index类创建Index对象,也可以通过Series或DataFrame中的 index属性 获取对应的Index对象。Index对象可以在多个数据间共享。例如:
Index对象的很多操作都与 numpy 中的数组类似,例如支持索引和切片操作,支持Numpy中的一些常见函数,拥有size,shape,ndim 等属性。不同的是Index 对象的值是不可变的。Index 对象的不可变特征使得多个数据之间进行索引共享时更加安全, 可避免因修改索引时而导致的副作用。
Index对象也支持集合操作,例如如并集、 交集、 差集等,这些操作也可以通过调用对象方法来实现。不同的是操作结果中可能会存在重复的元素。
Series中数据的访问
Series 对象与 numpy 中的一维数组 和 字典 dict 在很多方面都类似。Series 对象中数据访问可与它们进行类比学习。
(1)将Series看作字典
- 字典中的键不允许重复,但Series中的索引允许有重复值;
- 以索引为键,可访问对应的值,如果有多个,则结果为Series类型;
- 可调用字典的一些常见方法,如keys()、items()等,可判断是否包含指定索引;
- 可用字典类似语法更新数据,对已有的索引进行赋值,会修改索引对应的值,对一个不存在的索引进行赋值,会添加一个索引。
系统一般会为Series对象默认分配一个从0开始不断增大的索引,称为隐式索引;用户通过index指定的索引称为显式索引。如果显式索引为整数,容易冲突,通过键访问采用的是显式索引,通过切片访问采用的是隐式索引,尽量不要使用整数作为显式索引。其他情况下,两种方式可以共存。
(2)将Series看作一维数组
- 可以通过索引、切片、布尔表达式访问数据;
- 通过切片访问时,显式索引结果包含最后一个索引,隐式索引结果不包含最后一个索引。
(3)索引器:loc、iloc
- loc: 显式索引访问,即根据用户指定的索引访问
- iloc: 隐式索引访问,即根据位置序号访问
Series中常用方法
- sort_index():对Series按照索引排序,生成一个新的Series对象;
- sort_values():对Series按照值排序,生成一个新的Series对象;
- rank():对值进行排名,从1开始,对于相同的值默认采用平均排名;
- reindex():重新设置索引,生成一个新的Series对象。新的索引长度和原始索引长度可以不相同,如果新的索引不在原始数据中,则对应的值为NaN,如果在原始数据中,则值保持不变,可通过method参数指定值填充的方案(要求原始索引是递增的),还可通过fill_value参数指定填充值;
- Series对象也可执行numpy中的一些运算,此时只对值进行操作,索引和值之间的对应关系不变;
- Series对象之间执行运算时,会自动进行对齐,相同索引之间执行相应运算,不同索引对应的值为NaN。