现在很多行业,都离不开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级、60~69分为D级、70~79分为C级、80~89分为B级、90分以上为A级。D:G列为初二年级1班语文测验成绩表,如何根据语文成绩返回其字母等级?

方法:在H3:H13单元格区域中输入=VLOOKUP(G3, $A$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:$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:$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($A3='','',VLOOKUP($A3,员工基本信息!$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(B$9&ROW(A1),IF({1,0},$B$2:$B$6&COUNTIF(INDIRECT('b2:b'&ROW($2:$6)),B$9),$C$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可以用于excel计算吗_你好Python!再见Excel?相关推荐

  1. python可以做科学计算吗_用 Python 做科学计算之最小二乘

    前段时间帮@littlemorning做论文,要编程实现经济学的模型,其中主要用最小二乘拟合来估算一些函数的参数.科学计算的活一般来说都会用matlab,不过那样庞大的东西不是我所喜欢的.于是乎转向P ...

  2. python可用于数据抓取_基于PYTHON实现证券数据的抓取,以PYECHARTS实现证券数据实时分析...

    by Tony 主要采用Java+Python+MySQL+Redis的方式建设,以满足前期数据量较小的场景下,实时分析预警的要求.使用JAVA搭建核心框架:Python用于数据采集应用.数据分析模型 ...

  3. python excel行数计算不对_数十万数据Excel数据不好处理怎么办?几行Python搞定

    电商行业,每月有上百万条订单发货数据需要与仓库的数据进行核对计算,涉及到数据计算,筛选,匹配等步骤,用excel表超级卡,并且经常卡死. 这时如果你会Python,十几行代码就可以搞定. 这里需要两个 ...

  4. python计算信息增益_利用Python提取ABAQUS的计算结果(ODB)信息、体积、应变等变化(一)...

    00 实例模型 一个金属长方体,我们需要对其做拉伸的加载约束示意图如图1,并在完成后采用Python命令流读取参考点的位移.体积.应变随加载时间的变化情况. 图1 金属长方体约束加载示意图 01 Py ...

  5. 不是python中用于开发用户界面的第三方库-Python计算生态习题(50题)

    1.Python网络爬虫方向的第三方库是 A. request B. jieba C.itchat D.time 答案:A 2.Python网络爬虫方向的第三方库是 A.numpy B.scrapy ...

  6. python 两个数据框合并计算_一文掌握Excel、SQL、Python【数据合并】大法!

    文章最后有录制的讲解视频,如果看文章不舒服的话,可以直接滑到文末看视频,希望你能喜欢~ 在工作中,会经常遇到将多张表合并为一张表的需求:在面试的时候,有时也会被面试官问到左连接.右连接.内连接的区别. ...

  7. 随机数写excel java代码_基于python实现在excel中读取与生成随机数写入excel中

    搜索热词 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlr ...

  8. python拷贝excel工作簿_几百个Excel表格需要复制粘贴,如何用Python一键搞定?

    在工作中经过会遇到大量格式一致,内容不同的Excel表格文件,需要将这里面的内容整理到一个Excel文件中的情形.一般情况下,都是将这些Excel表格文件一个一个地打开,将里面的内容复制,然后粘贴到一 ...

  9. python打开excel进行编辑_使用Python进行Excel文件处理

    本章节选自本人著<Python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于 ...

最新文章

  1. 【Netty】入门Netty官方例子解析(三)处理一个基于流的传输 TCP粘包和拆包问题分析和解决
  2. String字符串编码解码格式
  3. 公司的API接口被刷了,那是因为你没这样做!
  4. Kubernetes API 聚合开发汇总
  5. 黑顶帽—lhMorpBlackTopHat
  6. IBASE Header change - access sequence
  7. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器,sqlserver
  8. STM32F1笔记(七)WWDG窗口看门狗
  9. Linux日志安全分析技巧
  10. 7-1 堆栈操作合法性 (15 分)
  11. pl/sql developer中建立job
  12. react脚手架 显示npm不知内部命令_第一章 React开发环境搭建
  13. Javascript模块化编程(二)AMD规范(规范使用模块)
  14. MAML小样本学习算法解读及基于飞桨的代码实现
  15. 【DNS应用案例】智能DNS赋能海运集团全球域名体系建设
  16. 利用cobaltstrike加sqlmap拿下一个网站并提权
  17. 应用程序图标变成白色
  18. uniapp小程序腾讯云视频调用实现1V1会话和踩坑分享
  19. 日志异常检测-机器学习
  20. ceph mon 无法启动,报错:ceph-12.2.11/src/mon/AuthMonitor.cc: 157: FAILED assert(ret == 0)

热门文章

  1. python求等差数列第n项_函数实现计算等差数列的第n项
  2. AutoCAD支持Windows 7 64位?
  3. 华为和华三模拟器大全
  4. Vuforia用在安卓设备中外接USB摄像头(一)
  5. openJDK awt 字体支持
  6. 用PHP程序来查询数据库内容并以表格的形式输出
  7. 联想计算机boss设置,联想电脑如何进行bios设置 联想电脑bios设置教程
  8. 关于C语言中的a++,++a,a--,--a;
  9. 【第八篇】商城系统-库存管理
  10. 太赞了!CSS or Canvas带你实现疯狂点赞!