成人18视频在线观看_亚洲欧美日韩中文高清一_精品福利一区二区免费视频_欧美日本在线观看免费视频

推廣 熱搜:

Python之自動化報表

   日期:2025-04-28     作者:一個數據人的自留地    瀏覽:47    評論:0    
核心提示:作者介紹@阿星互聯網資深數據分析師。專注自動化,醉心自動化處理一切。“數據人創作者聯盟”成員。人生苦短,我用python。相信做過報表的都對其煩不勝煩,周報,月報,季報;一期期的報表,一次次的心酸淚,

作者介紹

@阿星

互聯網資深數據分析師。

專注自動化,醉心自動化處理一切。

“數據人創作者聯盟”成員。


人生苦短,我用python。

相信做過報表的都對其煩不勝煩,周報,月報,季報;一期期的報表,一次次的心酸淚,煩不勝煩。至于作者是怎么知道的,因為我也是這個苦逼報表大軍的一員。


是這樣的,當時參與公司的一個項目,我的任務是出報表,聽到任務時,心中頓時樂開了花,嗚呼,這個簡單,不就是出個報表嗎。So easy!可拿到歷史數據做成的表格頓時就不淡定了,一共是6個excel,每個excel是4-5個sheet,每個sheet里還有一堆花花綠綠的表格需要填寫,心里頓時不淡定了。完成整個任務之后,唯一感覺到的是,痛苦麻木。


之后通過網絡查詢資料,發現這個報表居然可以自動化。接著花了一個星期的時間將報表自動化,當最后一個表格自動化代碼寫完后,打開python,運行程序,不得不說,一個字爽,再也不用一點一點的往sheet里弄數據了。


好了,接下來就為大家介紹今天的主角,xlwings。

先簡單的看一下最終生成的表格效果吧。


下面我們就來看看這個案例吧。


以下是我們的原始數據,一共以三個sheet,每個sheet,這三個sheet分別是原煤,原油,天然氣的數據。,指標有產量當期值,產量累計值,產量同比增長,產量累計增長。


這些數據都是可以在國家統計局里下載出來的,有興趣的小伙伴可以自行下載。這個案例是讓我們將數據以上表格的形式輸出,指標名稱是白色,單元格是黑色,此外數據中,紅色是大于平均值進行得標注,藍色是小于平均值進行的標注,表格字體為宋體。





首先呢,先導入相關庫,用python讀取原始數據。


importpandasaspd

import xlwings as xw

raw_coal=pd.read_excel(r'統計局數據.xlsx',sheet_name='原煤')

crude_oil=pd.read_excel(r'統計局數據.xlsx',sheet_name='原油')

natural_gas=pd.read_excel(r'統計局數據.xlsx',sheet_name='天然氣')

data=pd.merge(raw_coal,crude_oil,on='指標')

data=pd.merge(data,natural_gas,on='指標')

finally_data=data[['指標','原煤產量當期值(萬噸)','原油產量當期值(萬噸)','天然氣產量當期值(億立方米)']]

print(finally_data)



就數據而言,已經離我們要的最終表格差的不遠了,就差一點點細節了。


是時候上我們的主角xlwings,xlwings能夠非常方便的讀寫excel文件中的數據,最重要的是它可以對單元的格式進行修改,可以與pandas無縫連接。


使用xlwings庫創建一個excel工作簿,在工作簿中創建一個表,表的名稱為finally_data。


然后將上面利用pandas整合的數據復制到finally_data表格中,當然了將數據復制到表格中,在此看來有三種方式。


第一種:將一個數據看成一個單位,一個一個寫入創建的表格中,此時需要注意的是,每一個數據在excel的位置和在dataframe表格中的位置,以免出現錯誤。


第二種:將一行數據看成一個單位,此時需要注意的是,每行數據的第一個在excel中的位置,參考復制粘貼形式。


第三種:將一張表的數據看成一個單位,本質上與第二種沒什么區別,都是切片式傳入數據,但是第三種方法是一二維數組的形式寫入。


wb=xw.Book()sht=wb.sheets['Sheet1']sht.name='finally_data'columns=list(finally_data.columns)##得到列名sht.range('A1').value=columns####在第一行復制列名##第一種方式,將一個數據為單位,一個個寫入創建的表格中#forrowinrange(2,11):#forcolinrange(1,5):#sht.range(row,col).value=finally_data.iloc[row-2,col-1]##第二中方式,將一行數據為單位,一行一行的寫入創建的表格中#foriinrange(0,len(finally_data)):#data_row=list(finally_data.iloc[i,:])#row=i+2#row_clo='A'+str(row)#sht.range(row_clo).value=data_row#第三種方式,將一張表格為單位,直接寫入創建的表格中finally_data1=finally_data.valuessht.range('A2').value=finally_data1


三者均能達到我們想要結果,各有優劣,作者喜歡的是第三種。達到這一步的時候,剩下的就是對表格內單元格的格式進行修改了。


再對單元格進行修改之前,我們要先求出來原煤產量當期值,原油產量長期值,天然氣產量當期值,這三列數據中大于平均值和小于平均值的數據在Dataframe的位置,同時得出該數據在excel的位置,方便在進行單元格的格式修改。


describe=finally_data.describe()

avg=list(describe.loc['mean',:])

##計算大于均值的數在excel的位置

red_原煤=list(finally_data.index[finally_data['原煤產量當期值(萬噸)']>avg[0]])

red_position1=['B'+str(i+2) for i in red_原煤 ]

red_原油=list(finally_data.index[finally_data['原油產量當期值(萬噸)']>avg[1]])

red_position2=['C'+str(i+2) for i in red_原油 ]

red_天然氣=list(finally_data.index[finally_data['天然氣產量當期值(億立方米)']>avg[2]])

red_position3=['D'+str(i+2) for i in red_天然氣 ]

red=red_position1+red_position2+red_position3

##計算小于均值的數在excel的位置

blue_原煤=list(finally_data.index[finally_data['原煤產量當期值(萬噸)']

blue_position1=['B'+str(i+2) for i in blue_原煤 ]

blue_原油=list(finally_data.index[finally_data['原油產量當期值(萬噸)']

blue_position2=['C'+str(i+2) for i in blue_原油 ]

blue_天然氣=list(finally_data.index[finally_data['天然氣產量當期值(億立方米)']

blue_position3=['D'+str(i+2) for i in blue_天然氣 ]

blue=blue_position1+blue_position2+blue_position3

print(red)

print(blue

終于所有的條件全部滿足了,最后可以對表格的格式進行修改了。


首先就是將字體全部改成宋體同時在表格中有數據的區域加上邊框。


#區域內字體改變成宋體,加上邊框a_range=f'A1:D10'#區域sht.range(a_range).api.Font.Name='宋體'#字體sht.range(a_range).api.Borders(8).LineStyle=1#上邊框sht.range(a_range).api.Borders(9).LineStyle=1#下邊框sht.range(a_range).api.Borders(7).LineStyle=1#左邊框sht.range(a_range).api.Borders(10).LineStyle=1#右邊框sht.range(a_range).api.Borders(12).LineStyle=1#內橫邊框sht.range(a_range).api.Borders(11).LineStyle=1#內縱邊框


第二步就是將第一行的字體變成白色,單元格填充黑色。


#區域內字體顏色成白色,單元格變成黑色b_range=f'A1:D1'#區域第一行sht.range(b_range).api.Font.Color=0xffffffsht.range(b_range).color=(0,0,0)


最后一步就是將大于均值的數據字體改成紅色,小于均值的字體改成藍色。然后在進行保存。


#######在excel表格里改變字體顏色foriinred:sht.range(i).api.Font.Color=0x0000ffforiinblue:sht.range(i).api.Font.Color=0xFF0000wb.save('結果數據.xlsx')wb.close()



結果出來后,符合我們的要求。本次案例完整結束,當然了真正入手一個完整的自動化報表項目,遠不止這么簡單,中間還會出現一下別的問題。如果想要了解更多請持續關注.

-END-

以上就是Python之自動化報表的全部內容了,希望大家喜歡。

原文鏈接:http://www.923zg.com/news/132582.html,轉載和復制請保留此鏈接。
以上就是關于Python之自動化報表全部的內容,關注我們,帶您了解更多相關內容。
 
標簽: 數據 表格 產量
打賞
 
更多>同類資訊
0相關評論

推薦資訊
網站首頁  |  VIP套餐介紹  |  關于我們  |  聯系方式  |  手機版  |  版權隱私  |  SITEMAPS  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報