Python模块-Pandas(三)排序、运算及高级函数使用

1. 数据重排reindex

总的来说,reindex有两个功能,一个是对数据框的数据进行重排,另外一个是向数据框中添加数据。

对数据框进行重排

按指定index序列重排

重排主要指的是改变原有数据框的行列分布,将数据按指定的排布规则输出

上面的例子中,分别对df_2按行和列进行重排,方法是指定重排之后的序列。如果原有序列中不存在某一个index,该index对应的数值会用缺省值进行补齐;若原有index未出现在提供的index列表中,该index对应的数值就不会被显示。

通过sorted方法重排

上面的方法是通过给定与原有数据不同的index序列实现数据框的数据重排。一般情况下,我们更希望可以通过index或数据进行自动排序,这时可以利用sorted方法。

对于用sorted对数据框进行排序,有以下几点需要说明:

默认按行、从小到大的顺序输出,可以通过和两个参数指定排序条件

对于,默认按列进行排序,对应的axis=0,如果按行,需要指定axis=1,这与之前的axis对应关系不同,需要注意

通过rank方法排序

rank命令是对数据框中的数据进行大小排序,输出结果并不是数据框中的原始数据,而是排序之后的先后顺序值,示例如下:

从上面的示例可以看出,返回的结果与之前数据框的行列数目相同,但是每列的数据都是浮点数,表示每一个元素在排名之中的先后顺序,具体数值也会根据排名方式的不同发生变化。[对于具体数值的计算方法,有兴趣的话可以去官网查一下,小编没有看]。

添加或删减数据

上面提到,在用reindex方法进行重排时,如果原有序列中不存在某一个index,该index对应的数值会用缺省值进行补齐。此时只要制定相应的数值,就能够起到向数据框中添加数据的作用。

由上面的示例可以看出补全数据有两种方法:一种是通过ffill可以补全原有NaN的数据,还有两个方法和,不过测试没有成功,具体的原理没有搞懂。第二种方法是通过指定候选的值,也就是使用fill_value的功能。

2. 数据删除drop

上面讲述的reindex方法其实可以简介的实现数据的删除,除此之外,还可以用方法来删除指定的数据。在数据框一节中为大家讲到了[这个地方是一个链接,可以点进去的呦],其只是对index的处理,只返回处理之后的index序列。此处讲的drop是针对于数据框的,删除某个index对应的一行或一列内容,示例如下。

对于上面的示例,有几点需要注意:

指定index为index标签,一个标签可以直接给,如果想删除多个标签数据,输入模式为列表,如df_2.drop(["A","C"])

drop方法默认处理行标签,对于列标签,需要添加或参数

drop方法是输出一个拷贝,并不对原始数据框进行更改,如果需要直接改变原始数据,需要添加参数

3. 数值运算

pandas中的序列或数据框同Numpy中的数组有相同的性质,可以直接用来做数据框或序列之间的数值计算。

从上面的示例可以看出,数值运算有以下几个特点:

整个运算过程只针对于相同index对应的数据,若参与运算的两部分具有不同的index,计算后的数值就会全部变为NaN,这时可以通过上面提到的fill_value进行填充

数据框与序列进行运算时,是将序列中的数值与数据框中index对应的数据进行计算,并且应用于index对应的所有元素

上述的运算符采用数值运算符,除此之外,还可以使用函数名,如+对应add,用法为df_1.add(df_2),其与df_1+df_2意思相同。对于其他运算符,也有这两种用法,具体对应关系如下。

对于每一个方法,都对应两个函数,第二个函数在第一个基础之上加了r,说明是调转两个元素的位置,如df_1.pow(2)表示df_1**2,与之对应的df_1.rpow(2)表示2**df_1。

除此之外,还可以用numpy模块的方法对数据框或序列进行处理,如numpy.abs(pf_1)表示对df_1的每一个元素取绝对值。

4. 高级函数运算

与python原理相同,在pandas模块中也可以使用高级函数对数据框或序列进行处理。其意思是函数作为参数传递给某个方法,之后通过函数对数据框或序列进行处理。

apply函数

apply函数要求输入一个函数func作为参数,对数据框或序列进行处理,其中默认按列进行操作,如果想要按行进行处理,可以用axis=1或者axis="columns"进行设置,示例如下:

applymap函数

上面提到的apply函数是对每一行或每一列按照指定的函数去处理,applymap函数原理和python高级函数map相似,函数执行过程中处理数据框或序列中每一个元素,然后返回处理后的结果,示例如下。

此处提到的applymap函数只能是用于数据框,序列并没有此方法。对于序列而言,应该使用map方法,示例如下:

5.统计运算

sum

sum函数是对数据框中的存在的序列进行求和,比如某一行或某一列,默认是对每一列求和,对应axis=0.

默认情况下,sum函数在处理时会自动忽略掉数据框内存在的缺省值NaN,若想查看不是NaN的元素个数,可以使用count函数,其返回的是每列元素中不是缺省值的元素个数[返回数据为序列]。若不想让函数自动处理缺失值,可以添加参数。

idxmax/idxmin

返回每一列数据中的最大值和最小值的位置

结果显示每列最大值出现的位置,如Y列最大值为B行对应的元素...此处只是输出最值得位置,如果想要获取数值,可以使用max和min两个函数

cum系列函数

cumsum计算累加值

从结果来看,其计算方法默认是在列上做计算,输出数据框的每一列第一个元素为元素本身,第二个元素为第一个元素和第二个元素的累加,第三个元素为前三个元素的累加,以此类推...可以通过指定axis=1按行累加。

此外还包括cummax、cummin和cumprod函数,其中cummax是将运算处的元素替换成其与其之前元素中较大的值,cummin为最小值,cumprod与cumsum相似,只不过是计算累乘。

describe

返回对数据框进行统计计算之后的汇总信息,包括每一列的元素个数、平均值、方差以及分位数等等。

describe也可以通过设置和来接受用户自定义的分位数以及初步筛选数据,如表示统计结果中添加1/5位的统计结果,并且输出数据中只能包含数值,此时如果数据中存在缺省值NaN,就会被忽略

df.quantile(n)用于计算特定分位数值,n表示分为值,如0.25表示四分位数

df.mean(axis=n)计算平均值,默认按列进行计算,此时n=0

df.median(axis=n)计算中值,默认按列进行,此时n=0

df.mad(axis=n)计算平均绝对偏差,默认按列进行,此时n=0

df.var(axis=n)计算方差,默认按列进行,此时n=0

df.std(axis=n)计算标准方差,默认按列进行,此时n=0

其他运算

示例:

以上就是要和大家分享的pandas模块排序、运算以及高级函数的部分内容。

参考书籍:

Python for Data Analysis. Data Wrangling with Pandas, NumPy, and IPython (2017, O’Reilly)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180929G1TD3L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券