Pands导出excel

本文介绍使用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

你可能感兴趣的:(Pands导出excel)