美文网首页程序员
Pands导出excel

Pands导出excel

作者: 蠟筆小噺没有烦恼 | 来源:发表于2020-06-07 11:59 被阅读0次

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

        本文链接:https://www.haomeiwen.com/subject/rzfctktx.html