Pandas實現(xiàn)自定義Excel格式并導(dǎo)出多個sheet表
前言
pandas 默認(rèn)整合XlsxWriter驅(qū)動,自動化處理excel操作,提供公式、設(shè)置單元格格式、可視化分析圖片等操作
XlsxWriter官方使用說明:
1.導(dǎo)入pandas及數(shù)據(jù)
import pandas as pd df = pd.read_excel(r"C:\Users\xxx\xxx\XLSX 工作表.xlsx")
2.修改pd.to_excle方法
定義類writer:
class writer():
def __init__(self,df,sheet_name,key,path): #設(shè)置對象參數(shù)
self.df = df #dataframe數(shù)據(jù)(列表)
self.sheet_name = sheet_name #sheet名稱(列表)
self.key = key #需要上色字段(列表)
self.path = path #excel保存地址3.構(gòu)建保存方法save
def save(self):
#設(shè)置保存地址,默認(rèn)桌面
path = "C:/Users/xxx/Desktop/{}{}(導(dǎo)出時間{}).xlsx".format(pd.datetime.now().strftime("%y%m%d"),self.path,pd.datetime.now().strftime("%H時%M分%S秒"))4.創(chuàng)建pd.ExcelWriter實例
writer = pd.ExcelWriter(path,engine='xlsxwriter') #創(chuàng)建pandas.ExcelWriter實例,賦值給writer
5.創(chuàng)建多個sheet表
for j in range(len(self.sheet_name)): #遍歷sheet名稱列表
#創(chuàng)建sheet表并寫入dataframe數(shù)據(jù)
self.df[j].to_excel(writer, sheet_name=self.sheet_name[j], index=False #不寫入索引index=False
,freeze_panes=(1,2)) #設(shè)置固定1、2列(固定列無法左右移動)
workbook = writer.book #工作蒲方法
worksheet = writer.sheets[self.sheet_name[j]] #讀取sheet表6.設(shè)置自定義列寬
# 計算每列的合適字符寬度,放到元組中(可以設(shè)置最大值)
widths = (self.df[j].astype(str).applymap(lambda x: 40 if len(x)>61 else len(x)+6 if len(x)<8 else len(x)).agg(max).values)
#設(shè)置每列寬度大小
[worksheet.set_column(i, i, width) for i, width in enumerate(widths)] #計算的寬度,設(shè)置列寬7.設(shè)置列不同顏色
設(shè)置顏色列表,給不同列設(shè)計喜歡的顏色
color = ['#03A89E','#00C78C','#FFFFCD','#FFC0CB','#808A87','#FFE384','#ED9121','#40E0D0','#FFFFCD']*5 #顏色列表
[worksheet.set_column(i,i,widths[i],workbook.add_format({'fg_color': color[i-11],
'valign': 'vcenter',# 垂直對齊方式
'font_size': 10, #字體大小
'border': 4, #單元格邊框?qū)挾?br /> 'align': 'left' # 水平對齊方式
})) for
i,x in enumerate(self.df[j].columns) if self.df[j].columns[i] in self.key[0]]
8.設(shè)置首行格式
#設(shè)置首行寬度
worksheet.set_row(0,20,workbook.add_format({'fg_color':'#40E0D0'#背景顏色
,'bold': True,#字體加粗
'valign': 'vcenter',# 垂直對齊方式
'font_size': 16, #字體大小
'border': 10, #單元格邊框?qū)挾?
'align': 'left' # 水平對齊方式
}))
writer.save()
writer.close()9.可以設(shè)置隱藏不顯示列
worksheet.set_column("A:B",None,None,{'hidden':1}) #A至B列,隱藏調(diào)用方法:
writer1 = writer(df=[數(shù)據(jù)列表],path='文件名稱(保存到桌面)',key=[上色字段列表],sheet_name=['sheet表名列表']) writer1.save()
10.完整代碼
class writer():
def __init__(self,df,sheet_name,key,path):
self.df = df #dataframe數(shù)據(jù)(列表)
self.sheet_name = sheet_name #sheet名稱(列表)
self.key = key #需要上色字段(列表)
self.path = path #excel保存地址
def save(self):
#設(shè)置保存地址,默認(rèn)桌面
path = "C:/Users/xxx/Desktop/{}{}(導(dǎo)出時間{}).xlsx".format(pd.datetime.now().strftime("%y%m%d"),self.path,pd.datetime.now().strftime("%H時%M分%S秒"))
#創(chuàng)建pandas.ExcelWriter實例
writer = pd.ExcelWriter(path,engine='xlsxwriter') #創(chuàng)建pandas.ExcelWriter實例,賦值給writer
for j in range(len(self.sheet_name)): #遍歷sheet名稱列表
#創(chuàng)建sheet表并寫入dataframe數(shù)據(jù)
self.df[j].to_excel(writer, sheet_name=self.sheet_name[j], index=False #不寫入索引index=False
,freeze_panes=(1,2)) #設(shè)置固定1、2列(固定列無法左右移動)
workbook = writer.book #工作蒲格式方法
worksheet = writer.sheets[self.sheet_name[j]] #讀取sheet表
# 計算每列的合適字符寬度,放到元組中
widths = (self.df[j].astype(str).applymap(lambda x: 40 if len(x)>61 else len(x)+6 if len(x)<8 else len(x)).agg(max).values)
#設(shè)置每列寬度大小
[worksheet.set_column(i, i, width) for i, width in enumerate(widths)] #計算的寬度,設(shè)置列寬
color = ['#03A89E','#00C78C','#FFFFCD','#FFC0CB','#808A87','#FFE384','#ED9121','#40E0D0','#FFFFCD']*5 #顏色列表
[worksheet.set_column(i,i,widths[i],workbook.add_format({'fg_color': color[i-11],
'valign': 'vcenter',# 垂直對齊方式
'font_size': 10, #字體大小
'border': 4, #單元格邊框?qū)挾?
'align': 'left' # 水平對齊方式
})) for
i,x in enumerate(self.df[j].columns) if self.df[j].columns[i] in self.key[0]]
#設(shè)置首行寬度
worksheet.set_row(0,20,workbook.add_format({'fg_color':'#40E0D0'#背景顏色
,'bold': True,#字體加粗
'valign': 'vcenter',# 垂直對齊方式
'font_size': 16, #字體大小
'border': 10, #單元格邊框?qū)挾?
'align': 'left' # 水平對齊方式
}))
# worksheet.set_column("A:B",None,None,{'hidden':1}) #A至B列,隱藏
writer.save()
writer.close()
writer1 = writer(df=[df],path='フィロソフィー',key=[df],sheet_name=['sheet表名'])
writer1.save()輸出格式(如圖):
文件名:230121フィロソフィー(導(dǎo)出時間21時53分49秒).xlsx

輸出多個sheet表時,改為:
writer1 = writer(df=[df1,df2],path='文件名稱(路徑修改path)', key=[df.columns,df2.columns], sheet_name=['sheet表名1','sheet表名2']) writer1.save()
總結(jié)
坑:pandas.ExcelWriter默認(rèn)首行顏色格式無法修改,需要刪除首行后重新寫入首行
補充:除了xlsxwriter驅(qū)動外,還可以設(shè)置pandas.ExcelWriter的其他驅(qū)動,如:openxlsx驅(qū)動,區(qū)別:openxlsx支持對已有文件進(jìn)行讀寫,Xlsxwriter只支持重新寫入,Xlsxwriter速度更快和excel操作更豐富
到此這篇關(guān)于Pandas實現(xiàn)自定義Excel格式并導(dǎo)出多個sheet表的文章就介紹到這了,更多相關(guān)Pandas自定義Excel格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用urllib模塊開發(fā)的多線程豆瓣小站mp3下載器
對豆瓣音樂小站頁面html分析出所有mp3(正則匹配)文件url,然后用urllib.urlretrieve中方法直接將文件下載到本地,通過多線程技術(shù)下載2014-01-01
對python3.4 字符串轉(zhuǎn)16進(jìn)制的實例詳解
今天小編就為大家分享一篇對python3.4 字符串轉(zhuǎn)16進(jìn)制的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
使用Mixin設(shè)計模式進(jìn)行Python編程的方法講解
Mixin模式也可以看作是一種組合模式,綜合多個類的功能來產(chǎn)生一個類而不通過繼承來實現(xiàn),下面就來整理一下使用Mixin設(shè)計模式進(jìn)行Python編程的方法講解:2016-06-06
Python判斷一個list中是否包含另一個list全部元素的方法分析
這篇文章主要介紹了Python判斷一個list中是否包含另一個list全部元素的方法,結(jié)合實例形式對比分析了Python針對列表list元素包含關(guān)系的相關(guān)轉(zhuǎn)換、判斷操作技巧,需要的朋友可以參考下2018-12-12
Python實現(xiàn)的監(jiān)測服務(wù)器硬盤使用率腳本分享
這篇文章主要介紹了Python實現(xiàn)的監(jiān)測服務(wù)器硬盤使用率腳本分享,本文腳本適應(yīng)windows和linux系統(tǒng),需要的朋友可以參考下2014-11-11

