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中单元格的颜色等属性进行自定义的目的。使用样式参数可以使得表格更加易于阅读和解析。然而在实际应用中,需要注意要使用合适的颜色、字体、大小等属性,以及避免过多的图形化元素混乱数据展示。