本节将会指引你了解与Series或DataFrame中数据交互的基础机制。
reindex是pandas对象的重要方法,该方法用于创建一个符合新索引的新对象。考虑下面的例子:
Series调用reindex方法时,会将数据按照新的索引进行排列,如果某个索引值之前并不存在,则会引入缺失值:
在DataFrame中,reindex可以改变行索引、列索引,也可以同时改变二者。当仅传入一个序列时,结果中的行会重建索引:
列可以使用columns关键字重建索引:
如果已经拥有索引数组或不含条目的列表,在轴向上删除一个或更多的条目就非常容易,但这样需要一些数据操作和集合逻辑,drop方法会返回一个含有指示值或轴向上删除值的新对象:
在DataFrame中,索引值可以从轴向上删除。为了表明这个特性,首先创建一个示例DataFrame:
在调用drop时使用标签序列会根据行标签删除值(轴0):
可以通过传递axis=1或axis=’columns’来从列中删除值:
Series的索引(obj[…])与NumPy数组索引的功能类似,只不过Series的索引值可以不仅仅是整数。相关示例如下:
普通的Python切片中是不包含尾部的,Series的切片与之不同:
使用单个值或序列,可以从DataFrame中索引出一个或多个列:
这种索引方式也有特殊案例。首先,可以根据一个布尔值数组切片或选择数据:
行选择语法data[:2]非常方便。传递单个元素或一个列表到[]符号中可以选择列。
另一个用例是使用布尔值DataFrame进行索引,布尔值DataFrame可以是对标量值进行比较产生的:
在这个特殊例子中,这种索引方式使得DataFrame在语法上更像是NumPy二维数组。
对DataFrame在行上的标签索引,将介绍特殊的索引符号loc和iloc。允许使用轴标签(loc)或整数标签(iloc)以NumPy风格的语法从DataFrame中选出数组的行和列的子集。
通过标签选出单行多列的数据作为基础示例:
然后使用整数标签iloc进行类似的数据选择:
除了单个标签或标签列表之外,索引功能还可以用于切片:
因此,有多种方式可以选择、重排pandas对象中的数据。
在pandas对象使上用整数索引对新用户来说经常会产生歧义,这是因为它和在列表、元组等Python内建数据结构上进行索引有些许不同。例如,你可能认为下面的代码会产生错误:
在上面的例子中,pandas可以“回退”到整数索引,但是这样的方式难免会引起一些微小的错误。假设我们有一个索引,它包含了0、1、2,但是推断用户所需要的索引方式(标签索引或位置索引)是很难的:
另一方面,对于非整数索引,则不会有潜在的歧义:
为了保持一致性,如果有一个包含整数的轴索引,数据选择时请始终使用标签索引。
为了更精确地处理,可以使用loc(用于标签)或iloc(用于整数):
根据某些准则对数据集进行排序是另一个重要的内建操作。如需按行或列索引进行字典型排序,需要使用sort_index方法,该方法返回一个新的、排序好的对象:
在DataFrame中,可以在各个轴上按索引排序:
数据默认会升序排序,但是也可以按照降序排序:
如果要根据Series的值进行排序,使用sort_values方法:
默认情况下,所有的缺失值都会被排序至Series的尾部:
当对DataFrame排序时,可以使用一列或多列作为排序键。为了实现这个功能,传递一个或多个列名给sort_values的可选参数by:
对多列排序时,传递列名的列表:
排名是指对数组从1到有效数据点总数分配名次的操作。Series和DataFrame的rank方法是实现排名的方法,默认情况下,rank通过将平均排名分配到每个组来打破平级关系:
也可以按降序排名:
DataFrame可以对行或列计算排名:
目前为止我们所见过的示例中,轴索引都是唯一的(索引值)。尽管很多pandas函数(比如reindex)需要标签是唯一的,但这个并不是强制性的。
索引的is_unique属性可以告诉你它的标签是否唯一:
带有重复索引的情况下,数据选择是与之前操作有差别的主要情况。根据一个标签索引多个条目会返回一个序列,而单个条目会返回标量值:
相同的逻辑可以拓展到在DataFrame中进行行索引:
评论区(0)