99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線(xiàn)電話(huà):13121318867

登錄
首頁(yè)精彩閱讀全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?【CDA內(nèi)容分享】
全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?【CDA內(nèi)容分享】
2021-12-06
收藏

今天CDA給大家分享的內(nèi)容:Pandas遇上Excel會(huì)擦出什么樣的火花?

作者: 俊欣

來(lái)源:關(guān)于數(shù)據(jù)分析與可視化

大家好,又是新的一周。

Excel是我們職場(chǎng)打工人接觸最多的辦公室軟件之一,當(dāng)中會(huì)涉及到很多重復(fù)的操作,好在Python為我們提供了很多操作Excel的模塊,能夠幫助我們極大地提高工作效率,從瑣碎的工作時(shí)間中抽出身來(lái)。

今天我們要介紹的模塊是xlsxwriter,它的主要功能是在Excel表格當(dāng)中插入數(shù)據(jù)、插入圖表,以及進(jìn)行一系列數(shù)據(jù)的處理,

xlsxwriter模塊安裝

直接在命令行中輸入

pip install xlsxwriter

或者使用豆瓣鏡像

pip install -i https://pypi.douban.com/simple xlsxwriter

安裝成功之后,來(lái)看一下如何使用

將多個(gè)DataFrame數(shù)據(jù)保存到Excel表格當(dāng)中

當(dāng)我們用pandas模塊對(duì)Excel表格進(jìn)行處理的時(shí)候,需要引用xlsxwriter模塊作為內(nèi)在的引擎。我們來(lái)實(shí)現(xiàn)一下如何將多個(gè)DataFrame數(shù)據(jù)保存在一張Excel表格當(dāng)中,并且分成不同的sheet

import 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寫(xiě)入器 writer = pd.ExcelWriter('pandas_multiple.xlsx', engine='xlsxwriter') # 將不同的DataFrame數(shù)據(jù)集寫(xiě)入不同的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()

我們就可以在同級(jí)目錄中看到生成的一個(gè)Excel文件,在不同的Sheet當(dāng)中分別存放著指定的數(shù)據(jù)集

將多個(gè)DataFrame數(shù)據(jù)集放在一張Sheet當(dāng)中

將多個(gè)DataFrame數(shù)據(jù)集放在同一張Sheet當(dāng)中,通過(guò)當(dāng)中的參數(shù)startcolstartrow,顧名思義就是從哪一行、哪一列開(kāi)始

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開(kāi)始的 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()

如下圖所示

全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?

針對(duì)表格中的數(shù)據(jù)繪制直方圖

下面我們來(lái)看一下,如何利用Pandas來(lái)根據(jù)表格中的數(shù)據(jù)繪制柱狀圖,并且保存在Excel表格當(dāng)中,在xlsxwriter模塊當(dāng)中有add_chart()方法,提供了9中圖表的繪制方法,我們先來(lái)看一下柱狀圖的繪制

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ù)來(lái)繪制圖表 chart.add_series({'values': '=Sheet1!$B$2:$B$8'}) # 將繪制完成的圖表插入到sheet當(dāng)中 worksheet.insert_chart('D2', chart)

writer.save()

如下圖所示

全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?

針對(duì)表格中的數(shù)據(jù)制作折線(xiàn)圖

我們只需要針對(duì)上面的代碼,將type當(dāng)中的column改成line即可繪制折線(xiàn)圖

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'] # 繪制折線(xiàn)圖圖表 chart = workbook.add_chart({'type': 'line'}) # 根據(jù)哪些數(shù)據(jù)來(lái)繪制圖表 chart.add_series({'values': '=Sheet1!$B$2:$B$8'}) # 將繪制完成的圖表插入到sheet當(dāng)中 worksheet.insert_chart('D2', chart)

writer.save()

如下圖所示

全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?

除了折線(xiàn)圖直方圖之外,小編也在上面提到,xlsxwriter模塊提供了繪制9中圖表的方法,分別是

我們僅僅只需要在add_chart()方法當(dāng)中,填入對(duì)應(yīng)的圖表的類(lèi)型即可

為圖表添加標(biāo)題等輔助內(nèi)容

當(dāng)然圖表繪制出來(lái)之后,我們還需要添加例如標(biāo)題、標(biāo)記等輔助內(nèi)容,畢竟我們希望繪制出來(lá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': '...'})

我們嘗試來(lái)繪制一個(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ù)集來(lái)繪制圖表 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軸'}) # 將繪制出來(lái)的圖表插入到sheet當(dāng)中 worksheet.insert_chart('A7', chart)

workbook.close()

如下圖所示

全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?

同時(shí)我們還可以將兩種圖表結(jié)合起來(lái),例如是將折線(xiàn)圖直方圖這兩種圖表結(jié)合起來(lái)繪制,通過(guò)內(nèi)置的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)

如下圖所示

全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?

數(shù)據(jù)保留特定位數(shù)

我們可以對(duì)數(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() 

如下圖所示

全文2000字,當(dāng)Pandas遇上Excel會(huì)擦出什么樣的火花呢?

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線(xiàn)
立即咨詢(xún)
客服在線(xiàn)
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }