5.2 基本功能

(1)重新索引 - 方法reindex

方法reindex是pandas对象地一个重要方法,其作用是:创建一个新对象,它地数据符合新地索引。

 如,对下面的Series数据按新索引进行重排:

python 重新定义消息映射函数 python index重置_数组

根据新索引重排后的结果如下,当某个索引值不存在,就会在原来的基础上引入缺失值NaN:

python 重新定义消息映射函数 python index重置_数据_02

利用reindex的method选项,实现插值处理。尤其对于时间序列这样的有序数据,会经常用到该选项。

如,使用 ffill 实现 前向值 填充:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_03

python 重新定义消息映射函数 python index重置_数据_04

利用DataFrame,reindex修改(行)索引和列。(只传递一个序列时,会重新索引结果的行):

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_05

利用columns关键字,对列进行重新索引:

python 重新定义消息映射函数 python index重置_数据_06

reindex 函数的参数:

python 重新定义消息映射函数 python index重置_算术运算_07

 

(2)丢弃指定轴上的项 - 方法 .drop

丢弃某条轴上的一个或多个项,只要由一个索引数组或列表即可。

drop方法,返回的时一个在指定轴上删除了指定值的对象:

对于Series:

python 重新定义消息映射函数 python index重置_算术运算_08

对于DataFrame(可删除任意轴上的索引值):

先创建如下DataFrame例子:

python 重新定义消息映射函数 python index重置_数组_09

用标签序列调用drop,会从行标签(axis 0)删除值:

python 重新定义消息映射函数 python index重置_算术运算_10

通过传递axis=1或axis='columns'可删除列的值:

python 重新定义消息映射函数 python index重置_算术运算_11

Ps:如果想就地修改对象,可使用inplace参数(谨慎使用inplace,该参数会彻底删除被删除的数据!)

  

python 重新定义消息映射函数 python index重置_数据_12

 

(3)索引、选取和过滤

Series索引,其索引值可以是整数(单个、多个,或整数切片),也可以是具体的单个、多个index值,也可以是布尔类型条件。

1)创建Series示例:

python 重新定义消息映射函数 python index重置_数组_13

具体的例子如下:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_14

Ps:利用标签的切片运算与普通的Python切片运算不同,其末端是包含的!

  

python 重新定义消息映射函数 python index重置_数据_15

用切片可对Series的相应部分进行设置:

python 重新定义消息映射函数 python index重置_数据_16

2)DataFrame示例

python 重新定义消息映射函数 python index重置_数组_17

对DataFrame进行索引获取一个或多个列(问题:如何用类似切片的方式获取多个列???):

python 重新定义消息映射函数 python index重置_算术运算_18

python 重新定义消息映射函数 python index重置_数组_19

特殊Case:

  a)通过切片或布尔型数组选取数据:

  

python 重新定义消息映射函数 python index重置_数组_20

  b)通过布尔型DataFrame进行索引:(这样的DataFrame语法语NumPy二维数组语法非常相似)

  

python 重新定义消息映射函数 python index重置_数组_21

 

(4)用loc和iloc进行选取

引入特殊的标签运算符 loc 和 iloc,用于对DataFrame的行的标签索引。其中,使用轴标签(loc)索引,使用整数索引(iloc),从DataFrame选择行和列的子集。

1)通过标签选择一行和多列

python 重新定义消息映射函数 python index重置_数据_22

2)用 iloc 和整数进行选取

python 重新定义消息映射函数 python index重置_算术运算_23

注:最外层为行标签,往后为列标签

3) loc 和 iloc函数都适用于一个标签或多个标签的切片

python 重新定义消息映射函数 python index重置_数组_24

注:loc函数的轴标签索引,不同于Python的列表,[:'Utah', 'two'] 包含最后一个轴标签 'Utah';

  loc 和 iloc运算符分布处理严格基于标签和整数的索引!!!

4)对于DataFrame选取和重新组合数据的方法总结:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_25

 (5)整数索引

 

(6)算术运算和数据对齐

pandas最重要的一个功能:可以对不同索引的对象进行算术运算。比如,在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。(跟数据库的join相似)

对于Series:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_26

对于DataFrame:对齐操作会同时发生在行和列上

python 重新定义消息映射函数 python index重置_数组_27

将它们相加后返回一个新的DataFrame,其索引和列为原来两个DataFrame的并集:

python 重新定义消息映射函数 python index重置_数据_28

 

(7)在算术方法中填充值

在对不同索引的对象进行算术运算时,可在当一个对象中某个标签在另一个对象中找不到时,填充一个特殊值,比如0。则,此时可用add方法,使用如下df1的add方法,传入df2以及一个fill_value参数:

python 重新定义消息映射函数 python index重置_数组_29

与此类似,在对Series或DataFrame重新索引时,也可以指定一个填充值:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_30

python 重新定义消息映射函数 python index重置_数组_31

Ps:Series和DataFrame的算术方法入下表(他们每个都有一个副本,以字母r开头,它会翻转参数):

1 / df1 等价于 df1.rdiv(1)

python 重新定义消息映射函数 python index重置_算术运算_32

 

(8)DataFrame和Series之间的运算

DateFrame和Series之间的算术运算,在默认情况下,会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播(broadcasting)-附录A中详解:

python 重新定义消息映射函数 python index重置_数组_33

 Ps:

  1)如果某个索引在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集。

  

python 重新定义消息映射函数 python index重置_数组_34

  2)如果需要匹配行,且在列上广播,则必须使用算术运算方法(下例中传入的轴,就是希望匹配的轴)

  

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_35

 

(9)函数应用和映射

Numpy的ufuncs(元素级数组方法)也可用于操作pandas对象:

python 重新定义消息映射函数 python index重置_算术运算_36

另一个常见操作,将函数应用到由各列或行所形成的一维数组上。DataFrame的apply方法即可实现此功能:

该函数f,计算了一个Series的最大值和最小值的差,在data的每列都执行了一次。结果是一个Series,使用data的列作为索引。

python 重新定义消息映射函数 python index重置_数组_37

  如果传递axis=‘columns’到apply,这个函数会在每行执行:

  

python 重新定义消息映射函数 python index重置_数据_38

  Ps:许多最为常见的数组统计功能都被实现成DataFrame的方法(如sum和mean),因此无需使用apply方法。

传递到apply的函数不是必须返回一个标量,还可以返回由多个值组成的Series:

python 重新定义消息映射函数 python index重置_数据_39

元素级的Python函数也可用。如,想得到data中各个浮点值得格式化字符串,使用applymap即可:

python 重新定义消息映射函数 python index重置_数组_40

 

(10)排序和排名 - .sort_index( )、.sort_values( )、.rank( )

根据条件对数据集排序,是一种重要的内置运算。

使用sort_index方法,可对行或列索引进行排序(按字典顺序),将返回一个已排序的新对象

1)对Series索引排序

python 重新定义消息映射函数 python index重置_数组_41

  Ps:

  a)若要按对Series进行排序,可使用sort_values方法:

  

python 重新定义消息映射函数 python index重置_数组_42

 

 

   b)在排序时,任何缺失值默认都会被放到Series末尾

  

python 重新定义消息映射函数 python index重置_数组_43

 

 

2)对DataFrame (可根据任意一个轴上索引进行排序)

python 重新定义消息映射函数 python index重置_算术运算_44

  Ps:

  a)默认是按升序排序的,也可按降序排序

  

python 重新定义消息映射函数 python index重置_算术运算_45

  b)当排序一个DataFrame时,可根据一个或多个列中的值进行排序。将一个或多个列的名字传递给sort_values的 by 选项即可达到目的。

   

python 重新定义消息映射函数 python index重置_算术运算_46

 3)排名 - rank

排名,会从1开始一直到数组中有效数据的数量。默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的。

python 重新定义消息映射函数 python index重置_数组_47

也可根据值在原数据中出现的顺序给出排名:

python 重新定义消息映射函数 python index重置_数组_48

也可按降序进行排名:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_49

DataFrame可以在行或列上计算排名:

python 重新定义消息映射函数 python index重置_数据_50

  Ps:下表列出了所有用于破坏平级关系的method选项。

  

python 重新定义消息映射函数 python index重置_数组_51

 

(11)带有重复标签的轴索引

 尽管许多pandas函数都要求标签唯一,但这并非强制性的。

1)对于Series。如下,带有重复索引值的Series:

python 重新定义消息映射函数 python index重置_算术运算_52

索引的is_unique属性可用于检测它的值是否是唯一的:

python 重新定义消息映射函数 python index重置_数据_53

对带有重复值的索引,如果某个索引对应多个值,则返回一个Series;对应单个值,则返回一个标量值:

python 重新定义消息映射函数 python index重置_算术运算_54

2)对于DataFrame的行进行索引,也一样

python 重新定义消息映射函数 python index重置_数组_55

 

5.3 汇总和计算描述统计

pandas对象用于一组常用的数学和统计方法,大部分都属于约简和汇总统计,用于从Series中提取单个值(如sum和mean),或从DataFrame的行或列中提取一个Series。

看一个简单的DataFrame:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_56

调用DataFrame的sum方法将会返回一个含有列的和的Series:

python 重新定义消息映射函数 python index重置_算术运算_57

传入axis=‘Columns’ 或 axis=1,将会按行进行求和运算:

python 重新定义消息映射函数 python index重置_数组_58

Ps:NA值会自动被排除,除非整个切片(这里指的是行或列)都是NA。通过skipna选项可以禁用该功能:

  

python 重新定义消息映射函数 python index重置_数据_59

常用的约简方法:

python 重新定义消息映射函数 python index重置_数据_60

有的方法(如idxmin和idxmax)返回的是间接统计(比如达到最小值或最大值的索引):

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_61

有的方法则是累计型的:

python 重新定义消息映射函数 python index重置_数据_62

还有一种方法,既不是约简型,也不是累计型。比如,describe,用于一次性产生多个汇总统计:

python 重新定义消息映射函数 python index重置_数组_63

对于非数值型数据,desribe将会产生另外一种汇总统计:

python 重新定义消息映射函数 python index重置_数据_64

下表列出所有与描述统计相关的方法:

python 重新定义消息映射函数 python index重置_算术运算_65

 

(1)相关系数和协方差

有的汇总统计(如相关系数协方差)是通过参数对计算出来的。

接下来的示例,将会使用到pandas-datareader包。

pandas-datareader包是一个远程获取金融数据的Python工具,通过它可以方便获得下面公司和机构的数据:


 

  由于Yahoo!2017年被收购,已经无法获取书中案例数据,且近期无VPN,暂时先不学习该部分。 

 

(2)唯一值、值计数以及成员资格

下面介绍一类方法,用于从一维Series的值中抽取信息。

python 重新定义消息映射函数 python index重置_算术运算_66

1)unique函数,可得到Series中的唯一值数组:

python 重新定义消息映射函数 python index重置_数据_67

Ps:返回的唯一值是未排序的。可对结果再次进行排序(uniques.sort())

2)value_counts函数,用于计算一个Series中各值出现的频率:

python 重新定义消息映射函数 python index重置_数据_68

Ps:为了便于查看,结果Series是按值频率降序排列的。

  values_counts还是一个顶级pandas方法,可用于任何数组或序列:

  

python 重新定义消息映射函数 python index重置_数据_69

3)isin用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame中数据的子集:

python 重新定义消息映射函数 python index重置_数组_70

4)Index.get_indexer方法与isin类似,它可以给出一个索引数组,从可能包含重复值的数组到另一个不同值得数组:

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_71

python 重新定义消息映射函数 python index重置_python 重新定义消息映射函数_72

 

下期预告:讨论用pandas读取(或加载)和写入数据集的工具。

之后,更深入地研究使用pandas进行数据清洗、规整、分析和可视化工具