本文介绍使用Pandas导出Excel,并添加一些简单的格式
1 dataframe.to_excel导出Excel
df.to_excel(self,
excel_writer, # 输出路径
sheet_name='Sheet1', # 命名excel工作表名
na_rep='', # 缺失值填充 ,可以设置为字符串,数字,字符串;使用bool则用0和1代替
float_format=None, #数值类型的格式设置,'%.2f'保留2位有效数字
columns=None, # 选择输出的列,默认所有列。
header=True, # 是否将第一行作为表头,也可以传入list修改表头
index=True, #是否输出index 默认为True,也可以传入int使用行号的值作为表头
index_label=None, # 设置索引列的列名
startrow=0, #开始的行
startcol=0, #开始的列
engine=None, #输出引擎,openpyxl”或“ xlsxwriter
merge_cells=True, #将MultiIndex和Hierarchical Rows写入合并的单元格
encoding=None, #编码,xlwt才需要
inf_rep='inf', #无穷大的值用什么表示
verbose=True, #明细日志
freeze_panes=None) #是否冻结,传入(row,col)
在一个excel中写入多个sheet页,必须使用ExcelWriter:
with pd.ExcelWriter('output.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet_name_1')
df2.to_excel(writer, sheet_name='Sheet_name_2')
2 使用pandas.io.format.style.Styler设置格式
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.io.formats.style.Styler.to_excel.html
使用DataFrame的style来配置单元格
2.1 隐藏索引
df.hide_index()
2.2 格式
Styler.format(self, formatter, subset=None, na_rep: Union[str, NoneType] = None)
formatter:表示需要转换的格式
subset:需要作用的列,默认为所有列,传入list
na_rep:替换缺失值,默认不替换
示例:
df = pd.DataFrame(np.random.randn(4, 2), columns=['a', 'b'])
df['c'] = ['a', 'b', 'c', 'd']
#保留2位有效数字,并使用百分比形式
# df.style.format("{:.2%}",subset=['a'])
#整数保留3位,小数保留2位
# df.style.format( '${3:,.2f}',subset=['b'])
#字符转大些
df.style.format("{:.2%}",subset=['c'])
也可以用dic来传入列及其对应的转换方式,实现同时对多个列操作
df.style.format({'c':str.upper,'a':"{:.2%}"})
2.3 单元格背景色
一般来说,设置背景色无疑是根据值的大小来判断而配色;或是直接将某列配色
2.3.1 使用applymap对每个元素配色
根据v值的情况来判断其配色
'background-color: green'表示绿色;'background-color: '表示无背景色;也可以使用16进制色号比如#BFE9C4。
data.style.applymap(lambda v: 'background-color: %s' % 'green' if v=='pm' else '' ,subset=['a'])
如果只想对某些列的某些行做操作,subset可以些为如下格式:
subset=pd.IndexSlice[2:5, ['B', 'D']]
2.3.2 使用apply对每一列配色
例子中传入的x表示一列,也就是一个series。
#判断v是不是一列x的最大的值
def highlight_max(x):
return ['background-color: yellow' if v == x.max() else ''
for v in x]
df.style.apply(highlight_max)
2.4 快捷配色标记
除了2.3中介绍的自定义的配色方法,styles模块也提供了几个针对特定值的快捷方法。
2.4.1 最大、最小值标记
有如下几个方法:
subset表示作用于哪些列;color表示颜色;axis=0表示列,=1表示1
#最大值
highlight_max(self, subset=None, color='yellow', axis=0)
#最小值
highlight_min(self, subset=None, color='yellow', axis=0)
示例:
df.highlight_max(color='lightgreen').highlight_min(color='red')
2.4.2 空值标记
#空值,空值是针对所有元素来使用的,无法设置行列
highlight_null(self, color='red')
2.4.2 渐变色标记
还有一个特殊的,根据某些值的大小关系为其添加渐变色背景
background_gradient(self, cmap='PuBu', low=0, high=0, axis=0, subset=None, text_color_threshold=0.408, vmin: Union[float, NoneType] = None, vmax: Union[float, NoneType] = None)
cmap表示渐变色系,其他色系可以参考这里;
#示例
df.style.background_gradient(subset=['b'], cmap='BuGn')
2.4.3 选择器颜色标记[无法应用于Excel]
可以指定当鼠标选中时候的颜色显示
df.style.set_table_styles([{'selector': 'tr:hover','props': [('background-color', 'green')]}])
2.4.4 为其他无格式数据添加格式
#字体设置为败诉,对其方式为右对齐
df.style.set_properties(color="white", align="right")
#背景颜色为黄色
df.style.set_properties(**{'background-color': 'yellow'})
2.5 迷你条形图[无法应用于Excel]
使用的是style的bar函数
Styler.bar(self, subset=None, axis=0, color='#d65f5f', width=100, align='left', vmin=None, vmax=None)
# align表示对齐方式,可以为left,mid,zero
# vmin表示基准值
2.6 其他
设置标题
df.style.`set_cation('title')
清理格式
df.style.clear
空值替换
df.style.set_na_rep('defualt')
隐藏某些列
df.style.hide_columns(['a','b'])
2.8 单元格样式
单元格样式包含很多,其实background-color就属于,其实我们可以使用apply或者applymap统一设置,方法可以看上文,这里不再赘述。内容分隔如下:
'background-color:green;color:red'
2.8.1 color 字体颜色
2.8.2 border-style:边框格式
none 定义无边框。
hidden 与 "none" 相同。不过应用于表时除外,对于表,hidden 用于解决边框冲突。
dotted 定义点状边框。在大多数浏览器中呈现为实线。
dashed 定义虚线。在大多数浏览器中呈现为实线。
solid 定义实线。
double 定义双线。双线的宽度等于 border-width 的值。
2.8.3 border-width:边框宽度
默认3px,设置为1px,导出excel是正常的框线。
2.8.4 border-color:边框颜色
默认black
2.8.5 text-align:文本水平对齐方式
left\right\center
2.8.6 font-style:字体样式
normal 默认值。浏览器显示一个标准的字体样式。
italic 浏览器会显示一个斜体的字体样式。
oblique 浏览器会显示一个倾斜的字体样式。
2.8.7 font-family:字体
2.9 导出为html
df.style.render