赞
踩
写在前面
本期准备讲一下最近常用的一些关于pandas库的一些话题,至于重点则是放在介绍怎么使用pandas库来快速完成Excel中的筛选和编辑功能。下面正式进入本期的主题。
第一讲:Excel中的筛选和编辑
Excel,相信对各位来说都不会陌生吧。作为一名办公人士,我们在日常工作中最常用的Excel功能可能是数据透视表,但是,绝对不能否定的一点就是,Excel中的筛选功能绝对是我们最熟悉的Excel操作之一。你如果真的是一名中规中矩的办公人士的话,相信你对下面的这种表格绝对不会陌生。如果你想按照本文的顺序进行练习的话,那么请直接下载本文所采用的案例文件sample_sale。
是不是很熟悉的界面,假设你想筛选出其中账号,编码为141962,sku以B1开头的所有记录,那么就会使用这种筛选方式,当然你肯定会比小编更加熟练地使用这种功能。当然,很多时候,筛选只是前提,而后是要针对被筛选出来的数据进行一定的操作,例如对于上面符合条件的记录,增加一列佣金率,并将这些满足筛选条件的记录统一赋值为0.05,如果我们都比较规矩的话,那么应该会得到下面这张表:
本例中,小编选择了账号编码为141962,sku以B1开头的记录,同时为其增加了佣金率一列,并将其赋值为0.05.很明显,通过Excel进行这些操作方便快捷,而且不需要你会Excel函数以及vba基础就可以操作相对复杂的数据。然而,通过这种操作,至少存在两处不便:其一,你不能使你的操作重复进行,如果下次你遇到同类型的问题,你必须再次按照同样的流程再来一遍;其二,单纯地通过筛选后的数据表你并不能看出到底对数据赋予了什麼筛选条件,所以使得你每次筛选前必须先了解清楚前次操作都执行了什麼筛选(当然你可以直接清除所有的筛选条件,重新进行筛选,但是你要知道,虽然这不是很浪费时间,但是也是时间呀),这就造成了一定的不便。鉴于这两点,作为习惯偷懒的我们自然会想是否存在着另外的优质方法,那么这里小编就要告诉你,欢迎来到Python的世界,Python中的pandas库是你的首选,所以,下面小编就和大家唠唠怎么使用pandas库完成这种Excel操作。
第二讲:Pandas执行Excel筛选与编辑操作
pandas库是Python中的一个第三方库,如果你是按照笔者的推荐安装了Anaconda的话,那么这个库就已经默认安装了,如果你尚未安装这个Python库,那么可以通过在命令行中输入一下命令进行安装:
pip install numpy
pip install pandas
在安装pandas库之前最后先安装numpy库,因为pandas库就是基于numpy库进行开发的,所以最后能把他的老头子也带进你的圈子。这里笔者不会完整地介绍各种Python库的安装流程,如果你在安装过程中出现问题可以自行百度,也可以在问候或者小编的博客给小编留言。一旦安装好了这些库,你就告别了数据处理的石器时代,而正式迈入了二十一世纪。
2.1 布尔索引
前面笔者已经和大家讲过什麼是布尔值,那么布尔索引,顾名思义就是一句布尔值的真假进行相关位置的索引。pandas库对于数据表的筛选就是依赖于这种布尔索引,索引小编这里有必要再一次和大家聊一下这种索引方式。小编这里先创建一个pandas数据框,然后以此进行讲解。
import pandas as pd # 导入pandas库,并命名为pd
df = pd.DataFrame({'Account Name':['张三','李四','王五','赵六'],'Total Sales':[120,234,125,342],'City':['GuangZhou','GuangZhou','ShenZhen','ShenZhen']})
>>> df
Account Name
Total Sales
City
0
张三
120
GaungZhou
1
李四
234
GaungZhou
2
王五
125
ShenZhen
3
赵六
342
ShenZhen
可以看到,在生成的表格中默认在第一列生成了0,1,2,3这些编号,虽然在这些编号没有解释意义,但是它们却很方便地为索引创造了条件,当然你如果实在不喜欢这种索引,你也可以指定自己的索引值,这里小编就不予以介绍了。现在假设你想获得张三、王五、赵六的相关记录,那么你完全可以通过以下方式获得:
>>> Indices = [True,False,True,True]
>>> df[Indices]
Account Name
Total Sales
City
0
张三
120
GaungZhou
2
王五
125
ShenZhen
3
赵六
342
ShenZhen
发现一个有趣的现象了吗,第一列的索引号并没有重新排列,而是还是按照原来的索引号进行,现在知道为什麼小编说过这种索引很有用了吧,因为它会随时让你了解你改动了哪里,删去了哪里,以便让你随时有后悔药可以吃。既然了解了这种方式,那么你就不会让自己尽量少输入,而是通过判断得出布尔值进而去执行索引。想想一下,假设你现在想去获得来自于广州的客户记录,你会怎么做?当然你完全可以通过重新赋值一个变量Indices=[True,True,False,False]来执行索引,但是为什麼不尝试更加快捷的方式呢?
>>> df[df.City == 'GuangZhou']
Account Name
Total Sales
City
0
张三
120
GaungZhou
1
李四
234
GaungZhou
我想你现在应该对布尔索引有所印象了吧,那么现在就不要再迟疑了,利用这一武器来完成Excel的解救任务吧。
2.2 pandas执行筛选
上文采用布尔索引,一般我们得出的所有列的数据,但是,现实中我们可能并不是需要所有列的数据,因此Python设计了三种列索引方式从而去引用相应的列。
loc这种索引是按照列名进行选择,可以选择单个列名,当然也可以选择多列
iloc这种方式是按照列名的相对顺序进行选择,即按照0,1,2……进行选择
ix综合的选择方法,既可以扮演loc的角色,又可以扮演iloc的角色,不过小编强烈建议不要使用这种索引,除非你实在不明白loc和iloc。
只说理论不是小编的风格,小编还是以例子来进行说明,这里还是采用前面创建的df数据框来说明loc和iloc的用法,正如小编已经说到的那样,不推荐使用ix,所以这里就不介绍它的用法了。假设你现在想获取来源与广州的客户的销售信息,那么你可以采用下面两种方法中的任意一种达到目的:
df[df.City == 'GuangZhou','Total Sales'] # loc方式
df[df.City == 'GaungZhou',1] # iloc方式
所以你明白两种用法了吗?小编日常工作中,常常会将数据表整理成比较容易分析的数据表,是故每一列自然是被赋予了很好的列名的,因此在后续的分析中,小编将主要使用loc来进行列的索引。上面只是对一列的所以,我们自然可以通过赋予多个列名来进行多列的索引了。
>>> df[df.City == 'GaungZhou',['Account Name','Total Sales']]
Account Name
Total Sales
0
张三
120
1
李四
234
所以不要限制你的想象,Python中的pandas库总会给你意想不到的解决方案,既然现在已经学会了筛选数据,那么可以接着进行pandas库的第二项任务介绍了。
2.3 pandas执行编辑
既然已经知道怎么筛选数据表,那么接下来你就可以按照需要进行数据的编辑了。这里还是以我们自创的数据框为例进行说明。假设你现在想在原数据表中增加一列佣金率,并且都将其赋值为0.01,那么你可以通过一条很简短的语句完成其构造。
>>> df['Commision_Rate'] =,0.01
Account Name
Total Sales
City
Commisin_Rate
0
张三
120
GaungZhou
0.02
1
李四
234
GaungZhou
0.02
2
王五
125
ShenZhen
0.02
3
赵六
342
ShenZhen
0.02
通过这一命令,现在你加入了一列佣金率列,,并都将其赋值为了0.02,但是一般对大客户总是需要有些优惠的嘛,所以现在你考虑将其中销售额大于200的客户的佣金率定为0.01,如果在Excel中操作,那么你必须要先筛选出来然后再重新赋值,最后再清除筛选,但是使用pandas,仍然还是一条语句(如果你熟练了pandas库的操作运用其实很多Excel中的功能都是可以通过一条语句完成的)。
>>> df[df['Total Sales'] > 200,['Commision_Rate']] = 0.01
Account Name
Total Sales
City
Commisin_Rate
0
张三
120
GaungZhou
0.02
1
李四
234
GaungZhou
0.01
2
王五
125
ShenZhen
0.02
3
赵六
342
ShenZhen
0.01
现在已经完成了对于pandas执行Excel筛选和编辑功能的基本介绍,现在是时候来一个综合性的例子进行操作了,你准备好了吗?
2.4 综合示例
本示例以Excel文件Sales.xlsx为例进行说明,想同步进行的朋友请务必先下载分析中所使用的数据表。我们现在的数据处理要求主要有以下几点:
所有商品的佣金率在基准佣金率上进行调整,基准佣金率为0.02;
衬衫类(Shirt)商品的佣金率为0.025;
腰带(Belt)销量超过10条的佣金率为0.04;
鞋类(Shoes)销售额超过1000的,在享受0.045的佣金率的同时可以再额外获得250的奖金
计算出个客户最终可以获得的补偿
现在既然已经明白了数据处理需求,那么下面就是针对每一条要求进行程序编写。小编这里直接上程序,在程序内对各要求进行说明:
# 导入pandas库,并读取Excel文件Sales
import pandas as pd
df = pd.read_excel('Sales.xlsx') # 这一步操作建立在你的Excel文件处于你的工作路径中,否则使用`cd`命令改变操作路径
# 增加佣金率列,并赋值为0.02
df['Commission_Rate'] = 0.02
# 衬衫类佣金率为0.025
df.loc[df.category == 'Shirt',['Commission_Rate']] = 0.025
# 腰带(Belt)销量超过10条的佣金率为0.04
df.loc[(df.category == 'Belt')&(df.quantity > 10),['Commission_Rate']] = 0.04
# 鞋类(Shoes)销售额超过1000的,在享受0.045的佣金率的同时可以再额外获得250的奖金
df['bonus'] = 0.0
df.loc[(df.category == 'Shoes')&(df['ext price'] > 1000),['bonus','Commission_Rate'] = 250,0.045
# 计算出各客户最终可以获得的补偿
df['compesation'] = df.Commission_Rate*df['ext price'] + df.bonus
现在已经完成了分析,你可以看一下最后的输出数据表结果:
后记
文章写到这里已告一段落,本期文章主要介绍了怎么使用Python中的pandas库来执行Excel中常见的筛选和编辑操作,从而了解到了Excel中相对繁琐的鼠标操作完成可以由较为简单的Python程序予以实现。当然,本文的介绍相对来说还较为简单,后期,笔者会继续进行这一方面的介绍,以期真正实现Excel办公的Python化。最后再一次感谢你们的支持,你们的支持使我奋力前行!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。