pandas to_excel 添加颜色操作

1. pandas to_excel 添加颜色操作详解

使用Python中的pandas库,我们可以很方便地将数据集合转换成Excel文件格式,再进行各种数据处理。pandas的to_excel函数可以将DataFrame结构的数据集转化为Excel文件。to_excel函数有许多参数可用于控制输出内容的格式和展示方式,其中之一就是添加颜色操作。

在本篇文章中,我们将讨论如何在使用pandas的to_excel函数时添加颜色操作,以便更好地展示数据,并更好地辨认不同的数据。

2. pandas to_excel 函数简介

to_excel函数是pandas库中用于将DataFrame数据写入Excel文件中的函数,函数格式如下:

pandas.DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

其中,最重要的参数是excel_writer和sheet_name,分别表示要写入Excel文件的地址和工作表名。其他参数可以用于控制输出内容的格式和展示方式。

3. 添加颜色操作

在to_excel函数中,我们可以使用style参数来控制数据的显式方式,例如添加颜色等效果。style参数本质上是一个pandas的样式表,它能够自由定义单元格的属性,从而让Excel表格更具有可读性。下面我们就通过实例来学习如何使用style参数添加颜色操作。

3.1 安装openpyxl库

由于pandas的to_excel函数使用了openpyxl库来生成Excel文件,因此首先需要安装openpyxl库:

!pip install openpyxl

3.2 添加样式参数

添加样式参数时,我们可以使用一个字典将单元格(cell)的位置和样式属性值对应起来。具体而言,使用字典将列表索引作为键,样式内容以CSS样式属性-值对的形式存储为值,然后将字典作为参数传递给style参数。即

pd.DataFrame.to_excel(writer, sheet_name='Sheet1', 

startrow=2, startcol=1,

header=False, index=False, style=

{i: {'font_name':'Arial', 'font_size':14, 'bold':True, 'bg_color':'#d9d9d9',

'border':1, 'align':'center', 'valign':'vcenter'}

for i in range(len(df.index)+2)})

上面的代码可以将字体设置为Arial,字号设置为14pt,加粗设置为True,背景色设置为#d9d9d9,边框宽度设置为1px,居中对齐,并设置为垂直中心对齐。

3.3 完整示例

我们使用以下数据来演示样式参数的应用:

import pandas as pd

data = {'Name':['Tom', 'Amy', 'Lucy', 'Claire'],

'Age':[20, 22, 21, 19],

'Gender':['M', 'F', 'F', 'F'],

'City':['Shanghai', 'Beijing', 'Hongkong', 'New York']}

df = pd.DataFrame(data)

writer = pd.ExcelWriter('example.xlsx', engine='openpyxl')

df.to_excel(writer, sheet_name='Sheet1', index=False)

pd.DataFrame({'col_1': ['Total'],

'col_2': [df['Age'].sum()],

'col_3': [df[df['Gender'] == 'F']['Age'].sum()]})\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 2, startcol=1, header=False, index=False)

pd.DataFrame([['Ratio of Females', '=C1/B1']],

columns = ['col_1', 'col_2'])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 3, startcol=1, header=False, index=False)

pd.DataFrame([['Age', 'Gender'],

[df['Age'].mean(), None],

[df[df['Gender'] == 'M']['Age'].mean(),

df[df['Gender'] == 'F']['Age'].mean()]])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 5, startcol=1, header=False, index=False)

pd.DataFrame([['City', 'Count'],

[x, len(df[df['City'] == x])]

for x in df['City'].unique()])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 8, startcol=1, header=False, index=False)

pd.DataFrame([['City', 'Gender', 'Count'],

[x[0], x[1], len(df[(df['City'] == x[0]) & (df['Gender'] == x[1])])]

for x in df.groupby(['City', 'Gender']).groups.keys()])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 10, startcol=1, header=False, index=False)

pd.DataFrame(['', '', 'General Stats', '', 'Age Stats', '', '', 'City Stats', ''])\

.to_excel(writer, sheet_name='Sheet1',

startrow=0, startcol=4, header=False, index=False)

pd.DataFrame(['', 'Count', 'Female Count', '', 'Mean Age', '', '', 'City Count', ''])\

.to_excel(writer, sheet_name='Sheet1',

startrow=1, startcol=4, header=False, index=False)

pd.DataFrame(['', '', '', '', 'Male', 'Female', '',

'', 'Shanghai', 'Beijing', 'Hongkong', 'New York'])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 9, startcol=1, header=False, index=False)

pd.DataFrame(['Average Age'], columns=['col_1'])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 6, startcol=0, header=False, index=False)

pd.DataFrame(['Age by Gender'], columns=['col_1'])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 1, startcol=0, header=False, index=False)

pd.DataFrame(['Count by City'], columns=['col_1'])\

.to_excel(writer, sheet_name='Sheet1',

startrow=len(df.index) + 7, startcol=0, header=False, index=False)

writer.save()

我们通过为sheet第一行添加样式参数,让样式参数生效,并将数据行数和样式行数区别开。例如,我们可以将下面这个字典作为样式参数:

{

0: {'font_name':'Arial',

'font_size':14,

'bold':True,

'bg_color': '#CCE0FF',

'align': 'center'},

}

然后通过to_excel函数中的style参数将这个字典传递过去,即:

df.to_excel(writer, 'Sheet2', style={

0: {'font_name':'Arial',

'font_size':14,

'bold':True,

'bg_color': '#CCE0FF',

'align': 'center'},

})

上面的代码将会在第一行添加样式参数,让数据看起来更加好看。

4. 总结

在本文中,我们学习了如何给pandas中的to_excel函数添加样式参数,从而实现对Excel中单元格的颜色等属性进行自定义的目的。使用样式参数可以使得表格更加易于阅读和解析。然而在实际应用中,需要注意要使用合适的颜色、字体、大小等属性,以及避免过多的图形化元素混乱数据展示。

后端开发标签