收藏!全文2000字,當(dāng)Pandas遇上Excel會擦出什么樣的火花呢?!
↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能
后臺回復(fù)【大禮包】送你Python自學(xué)大禮包
Excel是我們職場打工人接觸最多的辦公室軟件之一,當(dāng)中會涉及到很多重復(fù)的操作,好在Python為我們提供了很多操作Excel的模塊,能夠幫助我們極大地提高工作效率,從瑣碎的工作時(shí)間中抽出身來。xlsxwriter,它的主要功能是在Excel表格當(dāng)中插入數(shù)據(jù)、插入圖表,以及進(jìn)行一系列數(shù)據(jù)的處理,xlsxwriter模塊安裝
直接在命令行中輸入
pip?install?xlsxwriter
或者使用豆瓣鏡像
pip?install?-i?https://pypi.douban.com/simple?xlsxwriter
安裝成功之后,來看一下如何使用
將多個(gè)DataFrame數(shù)據(jù)保存到Excel表格當(dāng)中
pandas模塊對Excel表格進(jìn)行處理的時(shí)候,需要引用xlsxwriter模塊作為內(nèi)在的引擎。我們來實(shí)現(xiàn)一下如何將多個(gè)DataFrame數(shù)據(jù)保存在一張Excel表格當(dāng)中,并且分成不同的sheetimport?pandas?as?pd
#?創(chuàng)建幾個(gè)DataFrame數(shù)據(jù)集
df1?=?pd.DataFrame({'Data':?[11,?13,?15,?17]})
df2?=?pd.DataFrame({'Data':?[21,?23,?25,?27]})
df3?=?pd.DataFrame({'Data':?[31,?33,?35,?37]})
#?引入xlsxwriter作為引擎,制作ExcelWriter寫入器
writer?=?pd.ExcelWriter('pandas_multiple.xlsx',?engine='xlsxwriter')
#?將不同的DataFrame數(shù)據(jù)集寫入不同的sheetd當(dāng)中
df1.to_excel(writer,?sheet_name='Sheet1')
df2.to_excel(writer,?sheet_name='Sheet2')
df3.to_excel(writer,?sheet_name='Sheet3')
#?輸出生成的Excel文件
writer.save()
我們就可以在同級目錄中看到生成的一個(gè)Excel文件,在不同的Sheet當(dāng)中分別存放著指定的數(shù)據(jù)集
將多個(gè)DataFrame數(shù)據(jù)集放在一張Sheet當(dāng)中
DataFrame數(shù)據(jù)集放在同一張Sheet當(dāng)中,通過當(dāng)中的參數(shù)startcol與startrow,顧名思義就是從哪一行、哪一列開始df1?=?pd.DataFrame({'Data':?[11,?13,?15,?17]})
df2?=?pd.DataFrame({'Data':?[21,?23,?25,?27]})
df3?=?pd.DataFrame({'Data':?[31,?33,?35,?37]})
df4?=?pd.DataFrame({'Data':?[41,?43,?45,?47]})
writer?=?pd.ExcelWriter('pandas_positioning.xlsx',?engine='xlsxwriter')
#?存放在指定的位置當(dāng)中
df1.to_excel(writer,?sheet_name='Sheet1')??#?默認(rèn)位置是從A1開始的
df2.to_excel(writer,?sheet_name='Sheet1',?startcol=4)
df3.to_excel(writer,?sheet_name='Sheet1',?startrow=8)
#?當(dāng)然我們不需要header和index
df4.to_excel(writer,?sheet_name='Sheet1',
?????????????startrow=10,?startcol=15,?header=False,?index=False)
writer.save()
如下圖所示

針對表格中的數(shù)據(jù)繪制直方圖
Pandas來根據(jù)表格中的數(shù)據(jù)繪制柱狀圖,并且保存在Excel表格當(dāng)中,在xlsxwriter模塊當(dāng)中有add_chart()方法,提供了9中圖表的繪制方法,我們先來看一下柱狀圖的繪制df?=?pd.DataFrame({'Data':?[10,?20,?30,?20,?15,?30,?45]})
writer?=?pd.ExcelWriter('pandas_chart.xlsx',?engine='xlsxwriter')
df.to_excel(writer,?sheet_name='Sheet1')
workbook??=?writer.book
worksheet?=?writer.sheets['Sheet1']
#?繪制柱狀圖圖表
chart?=?workbook.add_chart({'type':?'column'})
#?根據(jù)哪些數(shù)據(jù)來繪制圖表
chart.add_series({'values':?'=Sheet1!$B$2:$B$8'})
#?將繪制完成的圖表插入到sheet當(dāng)中
worksheet.insert_chart('D2',?chart)
writer.save()
如下圖所示

針對表格中的數(shù)據(jù)制作折線圖
我們只需要針對上面的代碼,將type當(dāng)中的column改成line即可繪制折線圖
df?=?pd.DataFrame({'Data':?[10,?20,?30,?20,?15,?30,?45]})
writer?=?pd.ExcelWriter('pandas_line.xlsx',?engine='xlsxwriter')
df.to_excel(writer,?sheet_name='Sheet1')
workbook??=?writer.book
worksheet?=?writer.sheets['Sheet1']
#?繪制折線圖圖表
chart?=?workbook.add_chart({'type':?'line'})
#?根據(jù)哪些數(shù)據(jù)來繪制圖表
chart.add_series({'values':?'=Sheet1!$B$2:$B$8'})
#?將繪制完成的圖表插入到sheet當(dāng)中
worksheet.insert_chart('D2',?chart)
writer.save()
如下圖所示

xlsxwriter模塊提供了繪制9中圖表的方法,分別是折線圖: line柱狀圖: column水平折線圖: bar面積圖: area餅圖: pie散點(diǎn)圖: scatter雷達(dá)圖: radar空心餅圖: doughnutK線圖: stock
我們僅僅只需要在add_chart()方法當(dāng)中,填入對應(yīng)的圖表的類型即可
為圖表添加標(biāo)題等輔助內(nèi)容
添加標(biāo)題是去調(diào)用set_title()方法
chart.set_title({'name':?'.....'})
添加x軸與y軸上面的標(biāo)注,需要用到的方法是
chart.set_x_axis({'name':?'...'})
chart.set_y_axis({'name':?'...'})
我們嘗試來繪制一個(gè)直方圖,并且添加上這些輔助信息
import?xlsxwriter
workbook?=?xlsxwriter.Workbook('chart.xlsx')
worksheet?=?workbook.add_worksheet()
#?Create?a?new?Chart?object.
chart?=?workbook.add_chart({'type':?'column'})
#?創(chuàng)建數(shù)據(jù)
data?=?[
????[1,?3,?5,?7,?9],
????[2,?4,?6,?8,?10],
????[3,?6,?9,?12,?15],
]
worksheet.write_column('A1',?data[0])
worksheet.write_column('B1',?data[1])
worksheet.write_column('C1',?data[2])
#?基于指定的數(shù)據(jù)集來繪制圖表
chart.add_series({'values':?'=Sheet1!$A$1:$A$5'})
chart.add_series({'values':?'=Sheet1!$B$1:$B$5'})
chart.add_series({'values':?'=Sheet1!$C$1:$C$5'})
#?標(biāo)題與標(biāo)注
chart.set_title({"name":?"直方圖"})
chart.set_x_axis({'name':?'這個(gè)是X軸'})
chart.set_y_axis({'name':?'這個(gè)是Y軸'})
#?將繪制出來的圖表插入到sheet當(dāng)中
worksheet.insert_chart('A7',?chart)
workbook.close()
如下圖所示

combine()方法chart?=?workbook.add_chart({'type':?'column'})
chart.add_series({'values':?'=Sheet1!$B$2:$B$8'})
line_chart?=?workbook.add_chart({"type":?"line"})
line_chart.add_series({'values':?'=Sheet1!$B$2:$B$8'})
chart.combine(line_chart)
如下圖所示

數(shù)據(jù)保留特定位數(shù)
我們可以對數(shù)據(jù),尤其是一些小數(shù),指定保留例如兩位小數(shù),或者是指定位數(shù)的小數(shù),代碼如下
df?=?pd.DataFrame({'Numbers':????[1010,?2020,?3030,?2020,?1515,?3030,?4545],
???????????????????'Percentage':?[.1,???.2,???.33,??.25,??.5,???.75,??.45?],
})
writer?=?pd.ExcelWriter("pandas_column_formats.xlsx",?engine='xlsxwriter')
df.to_excel(writer,?sheet_name='Sheet1')
workbook??=?writer.book
worksheet?=?writer.sheets['Sheet1']
#?指定保留小數(shù)的位數(shù)
format1?=?workbook.add_format({'num_format':?'#,##0.00'})
format2?=?workbook.add_format({'num_format':?'0%'})
#?設(shè)置列的寬度以及保留小數(shù)的位數(shù)
worksheet.set_column('B:B',?18,?format1)
#?不設(shè)置列的寬度,但是設(shè)置保留小數(shù)的位數(shù)
worksheet.set_column('C:C',?None,?format2)
writer.save()
如下圖所示

推薦閱讀
Python Web實(shí)戰(zhàn):Flask + Vue 開發(fā)一個(gè)漂亮的詞云網(wǎng)站
機(jī)密!網(wǎng)易員工數(shù)據(jù)分析內(nèi)訓(xùn)課程,白嫖了?。砀絻r(jià)值399元資料包)
評論
圖片
表情
