
Python处理Excel
chaodaibing
12年Linux运维工作经验
展开
-
Python—使用Openpyxl保存文件的坑(got invalid input value of type)
突然发现使用openpyxl打开文件,然后保存的时候,会遇到一种奇怪的报错。如图具体报错就是:TypeError: got invalid input value of type <class ‘xml.etree.ElementTree.Element’>, expected string or Element经过排查,发现这种报错属于openpyxl 3.0.2版本的一个bug,其他版本则没有发现这个情况,如果大家遇到这个报错,把openpyxl 升级到最新版本就可以啦。命令是 pip原创 2020-09-11 09:44:22 · 3023 阅读 · 0 评论 -
Python—使用pandas进行筛选操作的一个大坑
经常用pandas读取excel,进行筛选操作,最近竟然遇到了一个坑,真是给自己挖的坑,分享给大家。比如读取这么一个excel要按照运维筛选。我代码这么写的df=pd.read_excel(filename)df.rename(columns={"ops":"运维"})df=df.loc[df.运维=='张三']然后就立刻报错了:这里报错就是 cannot index with multidimensional key如果 用 df.运维.str.contains(‘张三’) 还会出现另原创 2020-11-20 17:28:40 · 4269 阅读 · 0 评论 -
Python—openpyxl快速设置Excel的单元格格式
Python处理Excel的问题方面,设置单元格格式是无法回避的,这里我主要用openpyxl处理。网上这种资料很多,我这里写了一个函数,汇总了一下。from openpyxl import load_workbookfrom openpyxl.utils import get_column_letter from openpyxl.styles import Font,Border,Side,PatternFill,Alignmentdef set_cells(cells,type,color=N原创 2020-09-27 11:08:54 · 9927 阅读 · 0 评论 -
Python—使用tkinter一键实现合并多个Excel的工作表的内容
只要是小组工作,经常会遇到这种的场景。比如一个Excel任务表,每人都有任务,我们需要分发Excel到每个人,让每个人各自反馈自己的任务进度,然后汇总过来。传统的做法就是,Excel群发给每个人,每个人各自筛选自己名下的任务,反馈各自任务进度,然后把各自反馈的Excel发给组长汇总。而组长呢,就只好一个个打开各个组员的Excel,一个个复制粘贴拼接内容,如果组员很多,实在是累死人啊。有没有解决办法呢?有条件的可以搞个在线共享Excel,大家都可以上去编辑。但是毕竟更多的单位没有这个条件,我想到了一个比较好原创 2020-09-23 15:46:42 · 2024 阅读 · 0 评论 -
Python—使用Openpyxl的dataframe_to_rows的一个小坑
这个坑说大不大,说小遇到了也头疼。一般我们把dataframe直接写到Excel文件,直接 df.to_excel即可。不过如果想把多个表格写入同一个工作表呢,那就需要用openpyxl的dataframe_to_rows功能。看下面一段代码。import pandas as pdfrom openpyxl import Workbookfrom openpyxl.utils.dataframe import dataframe_to_rowsdf1=pd.DataFrame([[1,4],[2,5原创 2020-09-03 09:48:50 · 8813 阅读 · 1 评论 -
Python—使用openpyxl打开Excel的一个小坑
最近打开了一个看似普通的Excel,里面的标题行有内置换行。但是用pandas打开发现这个标题行里面是带着\r的,但是用openpyxl打开,发现这个标题行里面带的就不是\r,而是被转换成了_x000D_所以,用openpyxl打开Excel的时候要注意,需要把_x000D_转换成\r ,否则和pandas打开的就不一样了。代码如下from openpyxl import load_workbookfilename='test.xlsx'wb=load_workbook(filename)ws=原创 2020-09-01 15:45:12 · 7954 阅读 · 0 评论 -
Python—一键实现Excel自动分组合并单元格
大家好,我们经常会有这样的需求。比如下图我们需要把同一个省份的合并起来,如下图的效果如何实现呢,这是原有的df原创 2020-08-31 14:27:26 · 2881 阅读 · 0 评论 -
Python—pandas对Excel的筛选功能的一个大坑(ValueError)
大家都知道,pandas处理Excel文件是非常得心应手的,比如做筛选,实在太方便了。一般是这么搞筛选的。比如我们要筛选一个叫分组的字段里面带支付字样的。import pandas as pddata=pd.read_excel(filename).fillna('-') #fillna就是替换NA的单元格df=data.loc[data['分组'].str.contains('支付')] #获取包含支付两个字的分组一般这样是完美的,但是偶尔会有这样的报错,不知道大原创 2020-08-21 00:21:23 · 15137 阅读 · 5 评论 -
Python—使用Matploblib读取Excel生成柱状堆叠图(带值的标记)
python的Pandas模块读取Excel非常方便,可以生成各种图,这不是重点。重点是如何在生成的柱状图上带上值的标识,这个需要费些心思。这里举一个百分比的例子,比如我有一个表,统计每一年这五个省GDP占全国的比例。我想要做一个堆叠的柱状图,实现很容易。但是要在图上带上值的标记,很费心思。import matplotlib.pyplot as pltimport matplotlib as mplimport pandas as pdplt.rcParams['font.sans-serif原创 2020-06-24 10:58:15 · 2373 阅读 · 0 评论 -
Python—实现把一个Excel的某些sheet导出成新Excel(保留单元格式)
一般我们把一个Excel的sheet导出成新Excel的办法呢,新建一个Excel,再复制粘贴,委实繁琐,而用Python可以轻松处理这个问题。我这个函数还考虑到了保留单元格格式的需求。def induct(file,newfile,sheetnames): #文件名 新文件名 sheet列表 file=file+'.xlsx' newfile=newfile+'.xlsx' alldata=pd.read_excel(file,None) cellmap={} writer=pd.Excel原创 2020-06-12 17:23:11 · 3420 阅读 · 13 评论 -
Python—实现从一个Excel筛选数据生成另一个Excel(保留所有单元格式)
#第一步 利用Dataframe筛选生成Excel 设定原表为oldfile 新表为newfilefrom openpyxl import load_workbookimport pandas as pdcellmap={}lwriter=pd.ExcelWriter(newfile)alldata=pd.read_excel(oldfile,None)for sheet in alldata.keys(): #遍历每一个sheet celllmap[sheet]={} data=a.原创 2020-06-11 14:49:59 · 10183 阅读 · 1 评论 -
Python—实现Excel文件间的数据匹配(保留单元格式)—告别Vlookup!
我们知道Excel有一个match函数,可以做数据匹配。比如要根据人名获取成绩而参考表sheet1的内容如下:要根据sheet1匹配每人的成绩,用Excel是这么写index(Sheet1!B:B,MATCH(A2,Sheet1!A:A,0))意思就是获取sheet1的B列的内容,根据我的A列匹配sheet1的A列的内容但是如何用python实现这一点呢,我写了一个函数,非常好用,分享给大家。这个函数考虑到了匹配多个字段,多个sheet。import pandas as pddef m原创 2020-06-12 16:52:37 · 6840 阅读 · 13 评论 -
Python—实现Excel的最合适列宽(openpyxl)
Python的Pandas模块是处理Excel的利器,尤其是加工保存Excel非常方便,但是唯独想让导出的Excel自动调整列宽或者行高,确实做不到啊。所以必须openpyxl模块助力。这是最简单的实现:from openpyxl import load_workbookwb = load_workbook('test.xlsx')ws = wb[wb.sheetnames[0]] # 打开第一个sheetws.column_dimensions['A'].wid原创 2020-06-11 20:13:46 · 21092 阅读 · 15 评论