pandas如何保存在excel里面_你好Python!再见Excel?

1348ec50c1cba6aea5c7d79bc37ac500.png a462e5337a145319f72f563d0684e45d.png 现在很多行业,都离不开Excel: 做财务的,要用Excel做报表; 做物流的,会用Excel来跟踪订单情况; 做HR的,会用Excel算工资; 做运营的,会用Excel记录数据做分析。 不知道你有没有这样的经历,每次你用Excel做数据分析时,往往都要生成好多张工作簿,做中间计算的时候, 鼠标要一路移到最后一页, 才出现最终结果。 如果其中某个数据出了些问题,你可能要从头开始,排查错误, 很容易看花眼,错上加错。 81841255f769df0e6137779a8eae013a.png 为了避免这种情况,很多人开始学 Excel的高级技能 - VBA 。 但其实,VBA并不容易学,而且在数据量大的情况下,VBA运行很耗时。 那么我们应该怎么解决呢?用 Python呀! 相比VBA,Python非常容易入门,而且用途广泛。 别人用Excel花2天做的事情,Python 1ge 小时就能搞定。 下面就用几个常见的操作带你感受一下:

数据读取、生成、存储

Excel读取本地数据需要打开目标文件夹选中该文件并打开 287214de912d89f5643371f7bf55cf8c.gifPandas支持读取本地Excel、txt文件,也支持从网页直接读取表格数据,只用一行代码即可,例如读取上述本地Excel数据可以使用pd.read_excel("示例数据.xlsx") 2ea0484c08af71417efc5c1230edcda3.png以生成10*2的0—1均匀分布随机数矩阵为例,在Excel中需要使用rand()函数生成随机数,并手动拉取指定范围 1dbd5fa5c92c83cc51ab8959d1362cf1.gif在Pandas中可以结合NumPy生成由指定随机数(均匀分布、正态分布等)生成的矩阵,例如同样生成10*2的0—1均匀分布随机数矩阵为,使用一行代码即可:pd.DataFrame(np.random.rand(10,2)) fe4f66b89d6fedfe0d68b1889ead1edb.png在Excel中需要点击保存并设置格式/文件名 7c0c9ce6a8018596e097fbb17b75aa1c.gif在Pandas中可以使用pd.to_excel("filename.xlsx")来将当前工作表格保存至当前目录下,当然也可以使用to_csv保存为csv等其他格式,也可以使用绝对路径来指定保存位置 dd40cd8227d8736ad91926c7c7969b4a.png

筛选、排序、去重数据

使用我们之前的示例数据,在Excel中筛选出薪资大于5000的数据步骤如下 2f7e50f4d230a48dc0dc74ab41f20cc6.gif在Pandas中,可直接对数据框进行条件筛选,例如同样进行单个条件(薪资大于5000)的筛选可以使用df[df['薪资水平']>5000],如果使用多个条件的筛选只需要使用&(并)与|(或)操作符实现 dfb584897d2df81f0205056cc8f49f57.png在Excel中可以点击排序按钮进行排序,例如将示例数据按照薪资从高到低进行排序可以按照下面的步骤进行 0fd2cecb74b5b53bba12418da7ac8f28.gif在pandas中可以使用sort_values进行排序,使用ascending来控制升降序,例如将示例数据按照薪资从高到低进行排序可以使用df.sort_values("薪资水平",ascending=False,inplace=True) 0f93d68ddacf5bf679c601e3b6a09e00.png在Excel中可以通过点击数据—>删除重复值按钮并选择需要去重的列即可,例如对示例数据按照创建时间列进行去重,可以发现去掉了196 个重复值,保留了 629 个唯一值。 7a1d1501b1c2ea1084b327eb7e3a29ec.gif在pandas中可以使用drop_duplicates来对数据进行去重,并且可以指定列以及保留顺序,例如对示例数据按照创建时间列进行去重df.drop_duplicates(['创建时间'],inplace=True),可以发现和Excel处理的结果一致,保留了 629 个唯一值。 eef6d232cbdedd3ce845508885ce4ebd.png

合并/拆分数据

在Excel中可以使用公式也可以使用Ctrl+E快捷键完成多列合并,以公式为例,合并示例数据中的地址+岗位列步骤如下 efe8f4849a59fe027d9d11e9fe217c0a.gif在Pandas中合并多列比较简单,类似于之前的数据插入操作,例如合并示例数据中的地址+岗位列使用df['合并列'] = df['地址'] + df['岗位'] 1dfb82d481aea437b717806796ea1570.png拆分数据在Excel中可以通过点击 数据—>分列并按照提示的选项设置相关参数完成分列,但是由于该列含有[]等特殊字符,所以需要先使用查找替换去掉 10e653d5b17a681d931512bea0c7156d.gif在Pandas中可以使用.split来完成分列,但是在分列完毕后需要使用merge来将分列完的数据添加至原DataFrame,对于分列完的数据含有[]字符,我们可以使用正则或者字符串lstrip方法进行处理,但因不是pandas特性,此处不再展开。 797a0f25a6ee2a3a5fd54fe78b6ce784.png

数据分组、统计、计算

在Excel中对数据进行分组计算需要先对需要分组的字段进行排序,之后可以通过点击分类汇总并设置相关参数完成,比如对示例数据的学历进行分组并求不同学历的平均薪资 3efdc3b61a01f2992849b175cb9a3398.gif在Pandas中对数据进行分组计算可以使用groupby轻松搞定,比如使用df.groupby("学历").mean()一行代码即可对示例数据的学历进行分组并求不同学历的平均薪资,结果与Excel一致 15c36fb4a8064dd37601fbb100ab4988.png在Excel中有很多统计相关的公式,也有现成的分析工具,比如对薪资水平列进行描述性统计分析,可以通过添加工具库之后点击数据分析按钮并设置相关参数 4fa7fe30c49d33a0d2c8bf3a21aba5ce.gif在pandas中也有现成的函数describe快速完成对数据的描述性统计,比如使用df["薪资水平"].describe()即可得到薪资列的描述性统计结果 73de93651328341b2696e645451cd8b5.png 在Excel中有很多计算相关的公式,比如可以使用COUNTIFS来统计薪资大于10000的岗位数量有518个 d041e4385ad65fbe4dbfc72daefcbc61.gif在Pandas中可以直接使用类似数据筛选的方法来统计薪资大于10000的岗位数量len(df[df["薪资水平"]>10000]) ed128bc05c77005918439f3e37f8342b.png

数据可视化

在Excel中可以通过点击插入并选择图表来快速完成对数据的可视化,比如制作薪资的直方图,并且有很多样式可以直接使用 dbd566c769ecef2043642083c2835b30.gif在Pandas中也支持直接对数据绘制不同可视化图表,例如直方图,可以使用plot或者直接使用hist来制作df["薪资水平"].hist() dbd566c769ecef2043642083c2835b30.gif也可以做数据透视表,在Excel中有现成的工具,只需要选中数据—>点击插入—>数据透视表即可生成,并且支持字段的拖取实现不同的透视表,非常方便,比如制作地址、学历、薪资的透视表 a2c4b5c4e39674b8bd9d0ec445d56684.gif在Pandas中制作数据透视表可以使用pivot_table函数,例如制作地址、学历、薪资的透视表pd.pivot_table(df,index=["地址","学历"],values=["薪资水平"]),虽然结果一样,但是并没有Excel一样方便调整与多样 8102dba5b988dd24896c3c8368e085e7.png

vlookup

vlookup号称是Excel里的神器之一,用途很广泛,你会几种? 案例一 问题:A3:B7单元格区域为字母等级查询表,表示60分以下为E级、60~69分为D级、70~79分为C级、80~89分为B级、90分以上为A级。D:G列为初二年级1班语文测验成绩表,如何根据语文成绩返回其字母等级?

87436fa213f36cc464cd69495c391f18.png

方法:在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)dfOut[]:      学号   姓名 性别   语文 等级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里面如何查找折旧明细表中对应编号下的月折旧额?(跨表查询)

a522dcce56f83970368b9fbeeab27a68.png

26ad0e5eaa84b25afc4c6a5a04012249.png

方法:在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
案例三 问题:类似于案例二,但此时需要使用近似查找

a522dcce56f83970368b9fbeeab27a68.png

ec9eb09cda41d1e6a243a66cf21b5a76.png

方法:在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列输入员工工号时,如何实现对应员工的姓名、身份证号、部门、职务、入职日期等信息的自动录入?

40fbeb02606d03e2d7e5db0746adb66e.png

60181f0e022c6c3a131078d762ad610b.png

方法:使用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函数一般情况下只能查找一个,那么多项应该怎么查找呢?如下图,如何把张一的消费额全部列出?

431f37fed30b088821627551ca214e44.png

方法:在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的优点在于: 处理数据功能很强大; 图形展示很高级; 大数据量也能处理; 运行速度可以分布管理; 可以边写,边测试; 很多免费好资源直接使用; 可追溯错误出在哪里; 很容易就实现自动化; 边写代码,边做文档; 用的很舒服,哈哈! 所以我们 在处理数据时也需要正确选择使用的工具! aa3aff44d769b29e01a84303ecce706e.png 67ccf9c38e44053b5f3a63174e743317.gif d8f821db9fc4b862205deff445d18a64.png aa1e36b531fc7fe1fde99807a0f85fd7.gif 91c8d69cd92023b9c7c52c93474b6ff5.png 3170afd2f9660c234ec5aa8394e5b17f.png 5b335d009551ce2edb15cca7703081c5.png 45264f61cd1729b15bb198e8f1fe5b16.png 5691782fc30e206700e075d91222febd.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Pythonpandas库可以方便地将数据保存Excel文件。具体步骤如下: 1. 导入pandas库 ```python import pandas as pd ``` 2. 创建DataFrame对象 ```python df = pd.DataFrame({'姓名': ['张三', '李四', '王五'], '年龄': [20, 25, 30], '性别': ['男', '女', '男']}) ``` 3. 将DataFrame对象保存Excel文件 ```python df.to_excel('data.xlsx', index=False) ``` 其中,to_excel()方法的第一个参数为保存的文件名,第二个参数index=False表示不保存行索引。如果需要保存多个sheet,可以使用ExcelWriter对象,具体用法可以参考pandas官方文档。 ### 回答2: 使用Python中的pandas库可以方便地将数据保存Excel格式。pandas提供了to_excel函数来将DataFrame存储到Excel文件中,同时支持多种格式的导出,如CSV、JSON等。 使用to_excel()函数保存Excel文件需要先将数据转化为DataFrame对象并创建ExcelWriter对象。在DataFrame对象被转化为Excel文件之前,需要通过ExcelWriter对象打开并连接到目标文件。连接到目标文件后,可以使用to_excel()函数将数据写入Excel文件中。 以下是Python pandas将DataFrame存储为Excel文件的详细实现步骤: 1. 引入必要的库: ```python import pandas as pd ``` 2. 创建DataFrame对象: ```python data = {'姓名': ['张三', '李四', '王五', '赵六'], '年龄': [20, 25, 28, 30], '性别': ['男', '男', '女', '男']} df = pd.DataFrame(data) ``` 3. 创建ExcelWriter对象并连接到目标文件: ```python writer = pd.ExcelWriter('test.xlsx') ``` 4. 将DataFrame对象写入Excel文件: ```python df.to_excel(writer, sheet_name='Sheet1') ``` 5. 保存Excel文件并关闭ExcelWriter对象: ```python writer.save() writer.close() ``` 到此,我们就成功地将DataFrame对象保存到了Excel文件中。以上实现过程中,需要注意的是,Excel文件的写入方式与创建方式是一样的,都需要建立ExcelWriter对象并连接到目标文件。同时,to_excel()函数中的sheet_name参数指定了Excel文件中的工作表名称,可以根据需要进行修改。 ### 回答3: Python中的Pandas(面向数据分析的Python库)可以方便地读取、处理和保存数据。其中,保存数据时,Pandas提供了丰富的保存文件格式的API,之中就包括了保存Excel文件的API。下面将详细介绍Python pandas保存Excel的相关操作。 一、Pandas保存Excel文件的基本语法: pandas.DataFrame.to_excel( excel_writer, #要保存Excel文件名称或IO对象 sheet_name, #保存到工作表中的名称 index, #是否包含行索引 header, #是否包含列名 encoding, #指定编码方式 compression, #指定压缩格式 ) 二、代码示例: # 导入Pandas模块 import pandas as pd # 读取Excel文件中的数据 data = pd.read_excel("数据.xlsx") # 数据处理操作 ... # 将处理后的数据保存Excel文件中 data.to_excel("处理结果.xlsx", sheet_name="sheet1", index=False, header=True, encoding='utf-8', compression=None) 三、参数说明: 1、excel_writer:要保存Excel文件名,或者一个ExcelWriter对象(比如pd.ExcelWriter()返回的对象),也可以是一个文件或文件类或类似对象的字符串路径。 2、sheet_name:需要保存的工作表名称,如果没有指定,将默认写入'Sheet1'。字符串是必需的,除非将excel_writer指定为文件名或文件类型的缓冲区类(如:TextIOWrapper, BufferedWriter和StringIO)。 3、index:是否要包含行索引,默认为True。 4、header:是否要包含列名,默认为True。 5、encoding:指定编码方式,默认为”utf-8“。 6、compression:指定压缩格式,可以选择“zip”和“gzip”等格式,默认为None。如果选择“zip”,则会将输出文件压缩到zip文件中。如果选择“gzip”,则会将输出文件压缩到gzip文件中。 四、总结: Pandas的to_excel函数可以方便地将处理后的数据保存Excel文件。这种方式可以省去手动复制和粘贴数据的繁琐过程,同时可以保证数据的准确性和一致性。在实际应用中,应该按需求进行设置参数,以获得最好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值