DataFrame表样式设置(一)
總第136篇/張俊紅
1.前言
我們知道Excel功能很強(qiáng)大,Python與Excel交互也有很多現(xiàn)成的模塊可以用,主要有xlrd、xlwt、openpyxl、xlsxwriter這四種可以用,這些模塊可以很好地通過(guò)Python實(shí)現(xiàn)Excel的功能,但是這些模塊有一個(gè)不太方便的地方就是針對(duì)每一個(gè)單元格的行列位置去操作的,每次使用都很麻煩,不像DataFrame那樣可以針對(duì)行列去進(jìn)行操作。DataFrame雖然操作便利,但是DataFrame又有個(gè)不如意的地方就是不能針對(duì)表去進(jìn)行設(shè)置格式(字體顏色、大小之類(lèi)的),所以有的時(shí)候?yàn)榱丝梢栽O(shè)置表的格式還是需要用那幾個(gè)比較麻煩的 Excel模塊。直到我遇到了StyleFrame模塊,這個(gè)模塊是把Pandas和openpyxl進(jìn)行了結(jié)合,讓你既可以享受DataFrame的操作便利,又可以輕松利用openpyxl進(jìn)行表格樣式設(shè)置。
接下來(lái)我們就看一看如何針對(duì)DataFrame表進(jìn)行樣式設(shè)置。要看怎么設(shè)置,我們得先看看可以設(shè)置什么。延續(xù)『對(duì)比Excel』特點(diǎn),我們還是同樣看看Excel中有哪些格式可以設(shè)置。
Excel中我們平常設(shè)置的主要有字體(類(lèi)型、顏色、邊框線、背景色、下劃線、大小、加粗)、對(duì)齊方式(水平方向、垂直方向)、數(shù)字(數(shù)據(jù)顯示格式,百分?jǐn)?shù)、小數(shù)點(diǎn)位數(shù)、時(shí)間格式等設(shè)置)、條件格式四個(gè)部分。
2.準(zhǔn)備工作
因?yàn)镾tyleFrame這個(gè)模塊不是Anaconda自帶的,所以需要我們手動(dòng)進(jìn)行安裝。直接進(jìn)行如下命令即可進(jìn)行安裝:
pip?install?StyleFrame你也可以選擇其他安裝方式,關(guān)于包的安裝方式可以看這篇:講幾種Python包的安裝方式
如果你是python3.7,那么你直接運(yùn)行上述命令可能會(huì)報(bào)錯(cuò),因?yàn)閜ip默認(rèn)安裝的是該模塊的最新版本(目前最新是2.0.2),但是最新版本可能不太兼容,這個(gè)時(shí)候你可以安裝1.6.2版本(2.0版本嘗試了也安裝失敗)的,我就是用的1.6.2版本安裝成功的。安裝命令如下:
pip?install?StyleFrame==1.6.2安裝好以后,我們需要新建一個(gè)StyleFrame供接下來(lái)使用,新建StyleFrame使用的方法與新建DataFrame用的一樣。
from?StyleFrame?import?StyleFrame,?Styler,?utilssf?=?StyleFrame({"col_1":?["一","二","三"],"col_2":["Excel","Sql","Python"]})需要注意的是這里的sf不同于DataFrame表的df,是不可以預(yù)覽的。
3.設(shè)置樣式對(duì)象
我們主要通過(guò)對(duì)下面的Styler進(jìn)行樣式設(shè)置。
Styler(bg_color=None,?bold=False,?font=utils.fonts.arial,?font_size=12,?font_color=None,number_format=utils.number_formats.general,?protection=False,?underline=None,border_type=utils.borders.thin,?horizontal_alignment=utils.horizontal_alignments.center,vertical_alignment=utils.vertical_alignments.center,?wrap_text=True,?shrink_to_fit=True,fill_pattern_type=utils.fill_pattern_types.solid,?indent=0,?comment_author=None,?comment_text=None)以下為Styler對(duì)象的參數(shù)說(shuō)明:
| bg_color | 單元格背景色 |
| bold | 字體加粗與否設(shè)置 |
| font | 字體類(lèi)型 |
| font_size | 字體大小 |
| font_color | 字體顏色 |
| number_format | 數(shù)值格式 |
| protection | 保護(hù)表格不被修改 |
| underline | 下劃線設(shè)置 |
| border_type | 邊框線設(shè)置 |
| horizontal_alignment | 水平方向?qū)R設(shè)置 |
| vertical_alignment | 垂直方向?qū)R設(shè)置 |
| wrap_text | 是否自動(dòng)換行 |
| shrink_to_fit | 是否根據(jù)字符長(zhǎng)度縮小以適應(yīng)單元格 |
| fill_pattern_type | 背景填充模式 |
| indent | 縮進(jìn)距離 |
| comment_author | 批注作者 |
| comment_text | 批注內(nèi)容 |
4.使用樣式
設(shè)置完樣式以后,我們就需要來(lái)指定在哪一行或哪一列上使用這個(gè)樣式。
4.1在列上使用
在某一列上使用樣式時(shí)需要用到如下方法:
apply_column_style(cols_to_style,styler_obj,style_header)參數(shù)說(shuō)明如下:
| cols_to_style | 要設(shè)置樣式的列名 |
| styler_obj | 樣式對(duì)象,即上面設(shè)置過(guò)的Styler |
| style_header | 是否將表頭也設(shè)置樣式 |
4.2在行上使用
我們除了在某一列上設(shè)置樣式外,我們有的時(shí)候要需要針對(duì)某些行進(jìn)行樣式設(shè)置,用到的方法如下:
apply_style_by_indexes(indexes_to_style,styler_obj,cols_to_style)參數(shù)說(shuō)明如下:
| indexes_to_style | 要設(shè)置樣式的行,sf[sf['col1'] = 20]表示設(shè)置col1列等于20的行 |
| styler_obj | 樣式對(duì)象 |
| cols_to_style | 要設(shè)置通過(guò)indexes_to_style選出那些行對(duì)應(yīng)的哪些列 |
5.字體設(shè)置
這一篇我們主要講講字體相關(guān)的設(shè)置,其他設(shè)置留在下一篇再講。
5.1字體類(lèi)型
第一個(gè)是關(guān)于字體類(lèi)型的設(shè)置,也就是什么字體,關(guān)于字體類(lèi)型設(shè)置使用的是font參數(shù),主要有如下幾種參數(shù)值(字體)可選:
aegean?=?'Aegean' aegyptus?=?'Aegyptus' aharoni?=?'Aharoni?CLM' anaktoria?=?'Anaktoria' analecta?=?'Analecta' anatolian?=?'Anatolian' arial?=?'Arial' calibri?=?'Calibri' david?=?'David?CLM' dejavu_sans?=?'DejaVu?Sans' ellinia?=?'Ellinia?CLM'字體類(lèi)型中用的最多的就是arial,即微軟雅黑。當(dāng)我們把字體樣式設(shè)置成Arial樣式,實(shí)現(xiàn)代碼如下:
#將col_1和col_2列的字體設(shè)置成微軟雅黑 sf.apply_column_style(cols_to_style=["col_1","col_2"],?styler_obj=Styler(font='Arial'),style_header=True) ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()我們用Excel打開(kāi)設(shè)置樣式后的文件,在字體類(lèi)型那一欄就會(huì)顯示Arial:
5.2顏色
第二個(gè)是關(guān)于字體顏色的設(shè)置,關(guān)于字體顏色設(shè)置使用的是font_color參數(shù),主要有如下幾種參數(shù)值(顏色)可選:
white?=?op_colors.WHITE?#白色 blue?=?op_colors.BLUE?#藍(lán)色 dark_blue?=?op_colors.DARKBLUE?#深藍(lán)色 yellow?=?op_colors.YELLOW?#黃色 dark_yellow?=?op_colors.DARKYELLOW?#深黃色 green?=?op_colors.GREEN?#綠色 dark_green?=?op_colors.DARKGREEN?#深綠色 black?=?op_colors.BLACK?#黑色 red?=?op_colors.RED?#紅色 dark_red?=?op_colors.DARKRED?#深紅色 purple?=?'800080'?#紫色 grey?=?'D3D3D3'?#灰色我們把col_1列的字體設(shè)置成綠色,col_2列字體設(shè)置成紅色,實(shí)現(xiàn)代碼如下:
sf.apply_column_style(cols_to_style=["col_1"],?styler_obj=Styler(font_color='green'),style_header=True)sf.apply_column_style(cols_to_style=['col_2'],?styler_obj=Styler(font_color='red'),style_header=True)ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()最后效果如下:
5.3邊框線
第三個(gè)是關(guān)于單元格邊框線設(shè)置的,關(guān)于邊框線的設(shè)置使用的border_type參數(shù),主要有如下幾種參數(shù)值(邊框線類(lèi)型)可選:
dash_dot?=?'dashDot'?#點(diǎn)劃線 dash_dot_dot?=?'dashDotDot'?#雙點(diǎn)劃線 dashed?=?'dashed'?#虛線 dotted?=?'dotted'?#點(diǎn)線 double?=?'double'?#雙線 hair?=?'hair'?#絲線 medium?=?'medium' medium_dash_dot?=?'mediumDashDot'?#中等點(diǎn)劃線 medium_dash_dot_dot?=?'mediumDashDotDot'?#中等雙點(diǎn)劃線 medium_dashed?=?'mediumDashed'?#中等虛線 slant_dash_dot?=?'slantDashDot'?#斜劃線 thick?=?'thick'?#粗線 thin?=?'thin'?#細(xì)線這里的邊框線其實(shí)也是一種線,那既然是線的設(shè)置,就和我們之前學(xué)過(guò)的折線圖里面線的設(shè)置大同小異了,大家可以根據(jù)自己的需求選擇合適的線形。
我們把邊框線設(shè)置成點(diǎn)劃線,實(shí)現(xiàn)代碼如下:
sf.apply_column_style(cols_to_style=["col_1","col_2"],?styler_obj=Styler(border_type='dashDot'),style_header=True)ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()最后效果如下:
5.4背景色
第四個(gè)是關(guān)于背景色的設(shè)計(jì),即單元格填充顏色,關(guān)于單元格背景顏色使用的是bg_color參數(shù),單元格背景的可選顏色和字體顏色一致,這里不再贅述。
我們把col_1列的單元格背景設(shè)置成綠色,col_2列單元格背景設(shè)置成紅色,實(shí)現(xiàn)代碼如下:
sf.apply_column_style(cols_to_style=["col_1"],?styler_obj=Styler(bg_color='green'),style_header=True)sf.apply_column_style(cols_to_style=['col_2'],?styler_obj=Styler(bg_color='red'),style_header=True)ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()最后效果如下:
5.5下劃線
第五個(gè)是關(guān)于下劃線設(shè)置,給字加下劃線,關(guān)于下劃線的設(shè)置使用的是underline參數(shù),主要有如下幾種參數(shù)值(下劃線類(lèi)型)可選:
single?=?'single'?#單下劃線 double?=?'double'?#雙下劃線我們把整表全部加單下劃線,實(shí)現(xiàn)代碼如下:
sf.apply_column_style(cols_to_style=["col_1","col_2"],?styler_obj=Styler(underline='single'),style_header=True)ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()最后效果如下:
5.6字體大小
第六是字體大小的設(shè)置,字體大小的設(shè)置就比較簡(jiǎn)單了,直接給參數(shù)font_size指明一個(gè)具體數(shù)字就行。如下,我們將第一列設(shè)置成20號(hào)字體,將第二列設(shè)置成12號(hào)字體。實(shí)現(xiàn)代碼如下:
sf.apply_column_style(cols_to_style=["col_1"],?styler_obj=Styler(font_size=20),style_header=True)sf.apply_column_style(cols_to_style=["col_2"],?styler_obj=Styler(font_size=12),style_header=True)ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()最后效果如下:
5.7字體加粗
第七個(gè)是字體是否加粗的設(shè)置,關(guān)于字體是否加粗使用的是bold參數(shù),如果要讓字體加粗,另bold=True,否則不設(shè)置即可。
我們將第兒列字體進(jìn)行加粗,第一列不進(jìn)行設(shè)置,實(shí)現(xiàn)代碼如下:
sf.apply_column_style(cols_to_style=["col_2"],?styler_obj=Styler(bold=True),style_header=True)ew?=?StyleFrame.ExcelWriter(r'my_excel.xlsx') sf.to_excel(ew) ew.save()最后效果如下:
關(guān)于字體相關(guān)的設(shè)置,我們就講到這里,下一篇開(kāi)始講一些其他方面的設(shè)置,敬請(qǐng)期待。
總結(jié)
以上是生活随笔為你收集整理的DataFrame表样式设置(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何轻松学习Python数据分析?
- 下一篇: 2月碎碎念