你好Python!再见Excel?

文章介绍了在数据分析场景中,如何使用Python的Pandas库替代Excel的VBA进行高效操作,包括数据读取、生成、存储、筛选、排序、去重、合并/拆分、统计计算以及数据可视化。Python的易学性和处理大数据的能力使其成为Excel的有力补充,尤其在需要自动化和高性能计算时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在很多行业,都离不开Excel:

做财务的,要用Excel做报表;

做物流的,会用Excel来跟踪订单情况;

做HR的,会用Excel算工资;

做运营的,会用Excel记录数据做分析。

不知道你有没有这样的经历,每次你用Excel做数据分析时,往往都要生成好多张工作簿,做中间计算的时候,鼠标要一路移到最后一页,才出现最终结果。

如果其中某个数据出了些问题,你可能要从头开始,排查错误,很容易看花眼,错上加错。

在这里插入图片描述

为了避免这种情况,很多人开始学Excel的高级技能 - VBA。

但其实,VBA并不容易学,而且在数据量大的情况下,VBA运行很耗时。

那么我们应该怎么解决呢?用Python呀!

相比VBA,Python非常容易入门,而且用途广泛。别人用Excel花2天做的事情,Python1ge 小时就能搞定。

下面就用几个常见的操作带你感受一下:

数据读取、生成、存储

Excel读取本地数据需要打开目标文件夹选中该文件并打开

在这里插入图片描述

Pandas支持读取本地Excel、txt文件,也支持从网页直接读取表格数据,只用一行代码即可,

例如读取上述本地Excel数据可以使用pd.read_excel(“示例数据.xlsx”)

在这里插入图片描述

以生成10*2的0—1均匀分布随机数矩阵为例,在Excel中需要使用rand()函数生成随机数,并手动拉取指定范围

在这里插入图片描述

在Pandas中可以结合NumPy生成由指定随机数(均匀分布、正态分布等)生成的矩阵,例如同样生成10*2的0—1均匀分布随机数矩阵为,使用一行代码即可:pd.DataFrame(np.random.rand(10,2))

在这里插入图片描述

在Excel中需要点击保存并设置格式/文件名

在这里插入图片描述

在Pandas中可以使用

pd.to_excel(“filename.xlsx”)来将当前工作表格保存至当前目录下,当然也可以使用to_csv保存为csv等其他格式,也可以使用绝对路径来指定保存位置

在这里插入图片描述

筛选、排序、去重数据

使用我们之前的示例数据,在Excel中筛选出薪资大于5000的数据步骤如下

在这里插入图片描述

在Pandas中,可直接对数据框进行条件筛选,例如同样进行单个条件(薪资大于5000)的筛选可以使用df[df[‘薪资水平’]>5000],如果使用多个条件的筛选只需要使用&(并)与|(或)操作符实现

在这里插入图片描述

在Excel中可以点击排序按钮进行排序,例如将示例数据按照薪资从高到低进行排序可以按照下面的步骤进行

在这里插入图片描述

在pandas中可以使用sort_values进行排序,使用ascending来控制升降序,例如将示例数据按照薪资从高到低进行排序可以使用df.sort_values(“薪资水平”,ascending=False,inplace=True)

在这里插入图片描述

在Excel中可以通过点击数据—>删除重复值按钮并选择需要去重的列即可,例如对示例数据按照创建时间列进行去重,可以发现去掉了196 个重复值,保留了 629 个唯一值。

在这里插入图片描述

在pandas中可以使用drop_duplicates来对数据进行去重,并且可以指定列以及保留顺序,例如对示例数据按照创建时间列进行去重df.drop_duplicates([‘创建时间’],inplace=True),可以发现和Excel处理的结果一致,保留了 629 个唯一值。

在这里插入图片描述

合并/拆分数据

在Excel中可以使用公式也可以使用Ctrl+E快捷键完成多列合并,以公式为例,合并示例数据中的地址+岗位列步骤如下

在这里插入图片描述

在Pandas中合并多列比较简单,类似于之前的数据插入操作,例如合并示例数据中的地址+岗位列使用df[‘合并列’] = df[‘地址’] + df[‘岗位’]

在这里插入图片描述

拆分数据在Excel中可以通过点击数据—>分列并按照提示的选项设置相关参数完成分列,但是由于该列含有[]等特殊字符,所以需要先使用查找替换去掉

在这里插入图片描述

在Pandas中可以使用.split来完成分列,但是在分列完毕后需要使用merge来将分列完的数据添加至原DataFrame,对于分列完的数据含有[]字符,我们可以使用正则或者字符串lstrip方法进行处理,但因不是pandas特性,此处不再展开。

在这里插入图片描述

数据分组、统计、计算

在Excel中对数据进行分组计算需要先对需要分组的字段进行排序,之后可以通过点击分类汇总并设置相关参数完成,比如对示例数据的学历进行分组并求不同学历的平均薪资

在这里插入图片描述

在Pandas中对数据进行分组计算可以使用groupby轻松搞定,比如使用df.groupby(“学历”).mean()一行代码即可对示例数据的学历进行分组并求不同学历的平均薪资,结果与Excel一致

在这里插入图片描述

在Excel中有很多统计相关的公式,也有现成的分析工具,比如对薪资水平列进行描述性统计分析,可以通过添加工具库之后点击数据分析按钮并设置相关参数

在这里插入图片描述

在pandas中也有现成的函数describe快速完成对数据的描述性统计,比如使用df[“薪资水平”].describe()即可得到薪资列的描述性统计结果

在这里插入图片描述

在Excel中有很多计算相关的公式,比如可以使用COUNTIFS来统计薪资大于10000的岗位数量有518个

在这里插入图片描述

在Pandas中可以直接使用类似数据筛选的方法来统计薪资大于10000的岗位数量len(df[df[“薪资水平”]>10000])

在这里插入图片描述

数据可视化

在Excel中可以通过点击插入并选择图表来快速完成对数据的可视化,比如制作薪资的直方图,并且有很多样式可以直接使用

在这里插入图片描述

在Pandas中也支持直接对数据绘制不同可视化图表,例如直方图,可以使用plot或者直接使用hist来制作df[“薪资水平”].hist()

在这里插入图片描述

也可以做数据透视表,在Excel中有现成的工具,只需要选中数据—>点击插入—>数据透视表即可生成,并且支持字段的拖取实现不同的透视表,非常方便,比如制作地址、学历、薪资的透视表

在这里插入图片描述

在Pandas中制作数据透视表可以使用pivot_table函数,例如制作地址、学历、薪资的透视表pd.pivot_table(df,index=[“地址”,“学历”],values=[“薪资水平”]),虽然结果一样,但是并没有Excel一样方便调整与多样

在这里插入图片描述

vlookup

vlookup号称是Excel里的神器之一,用途很广泛,你会几种?

案例一

问题:A3:B7单元格区域为字母等级查询表,表示60分以下为E级、6069分为D级、7079分为C级、80~89分为B级、90分以上为A级。D:G列为初二年级1班语文测验成绩表,如何根据语文成绩返回其字母等级?

在这里插入图片描述

方法:在H3:H13单元格区域中输入=VLOOKUP(G3, $A 3 : 3: 3:B$7, 2)

python实现:

df = pd.read_excel("test.xlsx", sheet_name=0)def grade_to_point(x):    if x >= 90:        return 'A'    elif x >= 80:        return 'B'    elif x >= 70:        return 'C'    elif x >= 60:        return 'D'    else:        return 'E'​df['等级'] = df['语文'].apply(grade_to_point)df​Out[]:      学号   姓名 性别   语文 等级0   101  王小丽  女   69  D1   102  王宝勤  男   85  B2   103  杨玉萍  女   49  E3   104  田东会  女   90  A4   105  陈雪蛟  女   73  C5   106  杨建丰  男   42  E6   107  黎梅佳  女   79  C7   108   张兴   男   91  A8   109  马进春  女   48  E9   110  魏改娟  女  100  A10  111  王冰研  女   64  D

案例二

问题:在Sheet1里面如何查找折旧明细表中对应编号下的月折旧额?(跨表查询)

在这里插入图片描述
在这里插入图片描述

方法:在Sheet1里面的C2:C4单元格输入 =VLOOKUP(A2, 折旧明细表!A 2 : 2: 2:G$12, 7, 0)

python实现:使用merge将两个表按照编号连接起来就行

df1 = pd.read_excel("test.xlsx", sheet_name='折旧明细表')df2 = pd.read_excel("test.xlsx", sheet_name=1) #题目里的sheet1df2.merge(df1[['编号', '月折旧额']], how='left', on='编号')Out[]:     编号   资产名称  月折旧额0  YT001    电动门   13991  YT005  桑塔纳轿车  11472  YT008    打印机    51

案例三

问题:类似于案例二,但此时需要使用近似查找

在这里插入图片描述
在这里插入图片描述

方法:在B2:B7区域中输入公式=VLOOKUP(A2&“*”, 折旧明细表!$B 2 : 2: 2:G$12, 6, 0)

python实现:这个比起上一个要麻烦一些,需要用到一些pandas的使用技巧

df1 = pd.read_excel("test.xlsx", sheet_name='折旧明细表') df3 = pd.read_excel("test.xlsx", sheet_name=3) #含有资产名称简写的表df3['月折旧额'] = 0for i in range(len(df3['资产名称'])):    df3['月折旧额'][i] = df1[df1['资产名称'].map(lambda x:df3['资产名称'][i] in x)]['月折旧额']​df3Out[]:   资产名称   月折旧额0   电动   13991   货车   24382   惠普    1323   交联  101334  桑塔纳   11475   春兰    230

案例四

问题:在Excel中录入数据信息时,为了提高工作效率,用户希望通过输入数据的关键字后,自动显示该记录的其余信息,例如,输入员工工号自动显示该员工的信命,输入物料号就能自动显示该物料的品名、单价等。

如图所示为某单位所有员工基本信息的数据源表,在“2010年3月员工请假统计表”工作表中,当在A列输入员工工号时,如何实现对应员工的姓名、身份证号、部门、职务、入职日期等信息的自动录入?

在这里插入图片描述
在这里插入图片描述

方法:使用VLOOKUP+MATCH函数,在“2010年3月员工请假统计表”工作表中选择B3:F8单元格区域,输入下列公式=IF( A 3 = " " , " " , V L O O K U P ( A3="","",VLOOKUP( A3="","",VLOOKUP(A3,员工基本信息! A : A: A:H,MATCH(B$2,员工基本信息!$2:$2,0),0)),按下【Ctrl+Enter】组合键结束。

python实现:上面的Excel的方法用得很灵活,但是pandas的想法和操作更简单方便些

df4 = pd.read_excel("test.xlsx", sheet_name='员工基本信息表')df5 = pd.read_excel("test.xlsx", sheet_name='请假统计表')df5.merge(df4[['工号', '姓名', '部门', '职务', '入职日期']], on='工号')Out[]:       工号   姓名  部门   职务       入职日期0  A0004  龚梦娟  后勤   主管 2006-11-201  A0003   赵敏  行政   文员 2007-02-162  A0005   黄凌  研发  工程师 2009-01-143  A0007   王维  人事   经理 2006-07-244  A0016  张君宝  市场  工程师 2007-08-145  A0017   秦羽  人事  副经理 2008-03-06

案例五

问题:用VLOOKUP函数实现批量查找,VLOOKUP函数一般情况下只能查找一个,那么多项应该怎么查找呢?如下图,如何把张一的消费额全部列出?

在这里插入图片描述

方法:在C9:C11单元格里面输入公式

=VLOOKUP(BKaTeX parse error: Expected 'EOF', got '&' at position 2: 9&̲ROW(A1),IF({1,0…B 2 : 2: 2:B$6&COUNTIF(INDIRECT(“b2:b”&ROW($2:$6)),B 9 ) , 9), 9),C 2 : 2: 2:C$6),2,),按SHIFT+CTRL+ENTER键结束。

python实现:vlookup函数有两个不足(或者算是特点吧),一个是被查找的值一定要在区域里的第一列,另一个是只能查找一个值,剩余的即便能匹配也不去查找了,这两点都能通过灵活应用if和indirect函数来解决,不过pandas能做得更直白一些。

df6 = pd.read_excel("test.xlsx", sheet_name='消费额')df6[df6['姓名'] == '张一'][['姓名', '消费额']]Out[]:    姓名   消费额0  张一   1002  张一   3004  张一  1000

操作可见,其实Excel在有些地方还是非常方便的。比如:

数据量不是很大;

不需要实时更新结果;

更改原数据,即时看每次结果有多大不同;

只要一个大体概念和粗略分析;

不需要长期使用和维护…

相对而言,Python的优点在于:

处理数据功能很强大;

图形展示很高级;

大数据量也能处理;

运行速度可以分布管理;

可以边写,边测试;

很多免费好资源直接使用;

可追溯错误出在哪里;

很容易就实现自动化;

边写代码,边做文档;

用的很舒服,哈哈!

所以我们在处理数据时也需要正确选择使用的工具!

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值