iT邦幫忙

2022 iThome 鐵人賽

DAY 24
1
AI & Data

先別急著學 Python | The Secret to Success in Python系列 第 24

Ɖ24-溫沙拉/ 自定義欄目大小與內容

  • 分享至 

  • xImage
  •  

在溫沙拉結束後 After the Salade Tiede

還記得前幾天我們提到"Salade Tiede"的意思,溫沙拉的本質並未從沙拉做改變,而是在既有的內容上做更多的調理,我們在這幾個章節中利用樞紐分析來介紹整個溫沙拉的節奏與菜色,利用了不同的眼光與切入點來分析所有資料,並且帶來更多元化的分析,這是溫沙拉的最後一篇文章了,我將會介紹自定義欄目,尋找適合的碗盤來裝這偉大的一道菜。

自行定義 Excel 欄目內容呈現

認識資料集 Know dataset

延續上一篇文章最後得到並且匯出的資料集,我們可以先看看會出的資料集結果呈現如何,按照慣例我們一樣使用 head() 方式查看一下資料樣貌,或者是說我也可以打開匯出的 Excel 檔案看看樣貌。

df = pd.read_excel("data/df-comp-datav2-Basic-out.xlsx")
df.head()

https://ithelp.ithome.com.tw/upload/images/20221008/20140740uap6nLL43F.png

調整工作表的大小 set_zoom()

現在我們有了工作表,我們可以做任何 xlsxwriter 支持的事情。我鼓勵你看一下 XlsxWriter 的文檔。首先,我們通過調整縮放來調整工作表的大小。

worksheet.set_zoom(90)

格式調整 add_format()

我們最大的一些改進是通過格式化列來使數據更易讀且好觀看。 add_format 對於改進標準輸出格式非常有用。下面是兩個數字格式化的例子。我們可以為有錢符號的單元格添加一個數字格式。或是添加帶有1個小數點的百分比格式。

money_fmt = workbook.add_format({'num_format': '$#,##0', 'bold': True})
percent_fmt = workbook.add_format({'num_format': '0.0%', 'bold': True})
total_fmt = workbook.add_format({'align': 'right', 'num_format': '$#,##0','bold': True, 'bottom':6})
total_percent_fmt = workbook.add_format({'align': 'right', 'num_format': '0.0%','bold': True, 'bottom':6})

列大小格式調整 set_column()

使用 set_column 改變幾列的大小。這也可以用來對某一列施加格式化。

worksheet.set_column('B:D', 20)                #name	street	city
worksheet.set_column('E:E', 5)                 #state
worksheet.set_column('F:F', 10)                #post-code
worksheet.set_column('G:K', 12, money_fmt)     #money_fmt format
worksheet.set_column('L:L', 12, percent_fmt)   #percent_fmt format

新增 Total Label

在我們的數據底部添加了一個總數。在 Excel 工作中,最大的挑戰是數字索引和單元格標籤之間的轉換。這個循環顯示瞭如何以數字方式循環瀏覽各列,同時使用 xl_rowcol_to_cell 來獲得單元格的位置。除了寫總標籤外,我們還想看看我們的配額百分比總和是多少。我們構建一個字符串來計算配額的百分比,並使用 write_formula 將其寫出來

number_rows = len(df.index)

for column in range(6, 11):
    cell_location = xl_rowcol_to_cell(number_rows+1, column)
    start_range = xl_rowcol_to_cell(1, column)
    end_range = xl_rowcol_to_cell(number_rows, column)
    formula = "=SUM({:s}:{:s})".format(start_range, end_range)
    worksheet.write_formula(cell_location, formula, total_fmt)
    
worksheet.write_string(number_rows+1, 5, "Total",total_fmt)
percent_formula = "=1+(K{0}-G{0})/G{0}".format(number_rows+2)
worksheet.write_formula(number_rows+1, 11, percent_formula, total_percent_fmt)

條件式結果上色 conditional_format()

最後要添加的項目是突出顯示前5個值和後5個值的能力。這為我們提供了一個很好的視覺表現,說明我們可能需要進一步檢查的地方。首先,我們定義我們想要格式化的範圍。

color_range = "L2:L{}".format(number_rows+1)
format1 = workbook.add_format({'bg_color': '#FFC7CE','font_color': '#9C0006'})
format2 = workbook.add_format({'bg_color': '#C6EFCE','font_color': '#006100'})

worksheet.conditional_format(color_range, {'type': 'top','value': '5','format': format2})
worksheet.conditional_format(color_range, {'type': 'bottom','value': '5','format': format1})

儲存結果 Save()

writer.save()

https://ithelp.ithome.com.tw/upload/images/20221008/20140740rrqHGYveHN.png

謝謝大家的觀看,但歷史的痕跡會持續下去

今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。


Hi'Jerry均

Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。

謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。


上一篇
Ɖ23-溫沙拉/ 簡單 Pandas 匯出報表至 Excel
下一篇
Ɖ25-布朗尼/ Numpy 多維陣列呈現
系列文
先別急著學 Python | The Secret to Success in Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言