還記得前幾天我們提到"Salade Tiede"的意思,溫沙拉的本質並未從沙拉做改變,而是在既有的內容上做更多的調理,我們在這幾個章節中利用樞紐分析來介紹整個溫沙拉的節奏與菜色,利用了不同的眼光與切入點來分析所有資料,並且帶來更多元化的分析,這是溫沙拉的最後一篇文章了,我將會介紹自定義欄目,尋找適合的碗盤來裝這偉大的一道菜。
延續上一篇文章最後得到並且匯出的資料集,我們可以先看看會出的資料集結果呈現如何,按照慣例我們一樣使用 head() 方式查看一下資料樣貌,或者是說我也可以打開匯出的 Excel 檔案看看樣貌。
df = pd.read_excel("data/df-comp-datav2-Basic-out.xlsx")
df.head()
現在我們有了工作表,我們可以做任何 xlsxwriter 支持的事情。我鼓勵你看一下 XlsxWriter 的文檔。首先,我們通過調整縮放來調整工作表的大小。
worksheet.set_zoom(90)
我們最大的一些改進是通過格式化列來使數據更易讀且好觀看。 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 改變幾列的大小。這也可以用來對某一列施加格式化。
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
在我們的數據底部添加了一個總數。在 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)
最後要添加的項目是突出顯示前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})
writer.save()
今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。
Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。
謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。