算式运算和数据对齐
pandas最重要的一个功能是,它可以对不同的对象进行算术运算。在将对象相加时,如果存在不同的索引对、则结果的索引就是该索引对的并集。
自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播。
对于DataFrame,对齐操作会同时发生在行和列上,两个DataFrame对象相加后就会返回一个新的DataFrame,其索引和列为原来那两个DataFrame的并集
在算术方法中填充值
在对不同索引的对象进行算术运算时,你可以希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0),在相加时,没有重叠的位置就会产生NA值
在对Series或DataFrame重新索引时,也可以指定一个填充值
算术方法
方法 | 说明 |
---|---|
add | 用于加法(+)的方法 |
sub | 用于减法(-)的方法 |
mul | 用于乘法(*)的方法 |
div | 用于除法(/)的方法 |
DataFrame和Series之间的运算
跟Numpy数组一样,DataFrame和Series之间的算数运算也是有明确规定:
默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DateFrame的列,然后沿着行一直向下广播;
如果某个索引值在DataFrame的列或Series的索引找不到,则参与运算的两个对象就会被重新索引以形成并集;
如果你希望匹配行且在列上广播,则必须使用算术运算方法。
函数应用和映射
NumPy的ufuncs(元素级数组方法)也可用作pandas对象
将函数应用到由列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能,许多最为常见的数组统计功能都被实现成DataFrame的方法(例如sum个mean),因此无需使用apply方法。
除了标量值外,传递给apply的函数还可以返回由多个值组成的Series。
此外,元素级的Python函数也是可以用的。假如想得到frame中各个浮点值得格式化字符串,使用applymap即可。之所以叫applymap,是因为Series有一个用于应用元素级函数的map方法。
排序和排名
根据条件对数据集排序,要对行或列索引进行排序(按字典顺序),可使用sort_index方法,它将返回一个已排序的新对象。
而对于DataFrame,则可以根据任意一个轴上的索引进行排序。
数据默认是按升序排序的,但可以降序排序,ascending=False
若要按值对Series进行排序,可使用order方法,在排序时,任意缺失值默认都会被放到Series的末尾;
在DataFrame上,你可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给by选项即可达到该目的。要根据多个列进行排序,传入名称的列表即可,排名跟排序关系密切,且它会增设一个排名值(从1开始,一直到数组中有效数据的数量)。它跟numpy.argsort产生的间接排序索引差不多,只不过他可以根据某种规则破坏平级关系。Series和DataFrame的rank方法在默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的。
也可以根据值在原数据中出现的顺序给出排名。
排名时用于破坏平级关系的method选项
method | 说明 |
---|---|
‘average’ | 默认:在相等分组中,为各个值分配平均排名 |
‘min’ | 使用整个分组的最小排名 |
‘max’ | 使用整个分组的最大排名 |
‘first’ | 按值在原始数据中的出现顺序分配排名 |