代码之家  ›  专栏  ›  技术社区  ›  Egor Ignatenkov

pandas xlsxwriter,格式化表格标题-而不是工作表标题

  •  39
  • Egor Ignatenkov  · 技术社区  · 8 年前

    我正在使用xlsxwriter将熊猫数据帧保存到_excel。我已经成功地格式化了所有数据(设置列宽、字体大小等),除了更改标题的字体,我找不到方法。下面是我的例子:

    import pandas as pd
    data = pd.DataFrame({'test_data': [1,2,3,4,5]})
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    
    data.to_excel(writer, sheet_name='test', index=False)
    
    workbook  = writer.book
    worksheet = writer.sheets['test']
    
    font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10})
    header_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10, 'bold': True})
    
    worksheet.set_column('A:A', None, font_fmt)
    worksheet.set_row(0, None, header_fmt)
    
    writer.save()
    

    试图设置标题格式的倒数第二行没有任何作用。

    7 回复  |  直到 2 年前
        1
  •  50
  •   rleelr    4 年前

    我认为您需要首先重置默认标题样式,然后可以更改它:

    pd.core.format.header_style = None
    

    总之:

    import pandas as pd
    
    data = pd.DataFrame({'test_data': [1,2,3,4,5]})
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    
    pd.core.format.header_style = None
    
    data.to_excel(writer, sheet_name='test', index=False)
    
    workbook  = writer.book
    worksheet = writer.sheets['test']
    
    font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10})
    header_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10, 'bold': True})
    
    worksheet.set_column('A:A', None, font_fmt)
    worksheet.set_row(0, None, header_fmt)
    
    writer.save()
    

    解释人: jmcnamara ,谢谢:

    在Excel中,单元格格式覆盖行格式覆盖列格式 pd.core.format.header_style 转换为格式并应用于标题中的每个单元格。因此,默认值不能被 set_row() 背景 pd.core.format.header_style格式 None 表示标题单元格没有用户定义的格式,因此可以被 set_row() .

    编辑:在版本中 0.18.1 你必须换衣服

    pd.core.format格式。header_style=无
    

    收件人:

    pd.formats.format.header_style = None
    

    编辑:从版本0.20再次更改

    import pandas.io.formats.excel
    pandas.io.formats.excel.header_style = None
    

    谢谢 krvkir .

    编辑:从版本0.24开始,现在需要

    import pandas.io.formats.excel
    pandas.io.formats.excel.ExcelFormatter.header_style = None
    

    谢谢 Chris Vecchio .

        2
  •  30
  •   Ironbeard    7 年前

    对于任何人来说,如果你看到这篇帖子,并且正在使用Pandas 0.20.1,那就更新一下。

    看来现在所需的代码是

    import pandas.io.formats.excel
    pandas.io.formats.excel.header_style = None
    

    显然 excel 子模块不是自动导入的,所以只需尝试 pandas.io.formats.excel.header_style = None 独自一人会引发 AttributeError .

        3
  •  24
  •   Chris Vecchio    5 年前

    Pandas的另一个选择是0.25(可能也是0.24)。可能不是最好的方法,但它对我很有效。

    import pandas.io.formats.excel
    pandas.io.formats.excel.ExcelFormatter.header_style = None
    
        4
  •  6
  •   eliu    4 年前

    对于大熊猫0.24:

    下面的不再工作:

    import pandas.io.formats.excel
    pandas.io.formats.excel.header_style = None
    

    相反,创建一个单元格格式对象,并使用新的单元格格式对象一次一个单元格地重写第一行的内容(标题)。
    现在,你是未来的证明。

    使用以下伪代码:

    # [1] write df to excel as usual
    writer = pd.ExcelWriter(path_output, engine='xlsxwriter')
    df.to_excel(writer, sheet_name, index=False)
    
    # [2] do formats for other rows and columns first
    
    # [3] create a format object with your desired formatting for the header, let's name it: headercellformat
    
    # [4] write to the 0th (header) row **one cell at a time**, with columnname and format
    for columnnum, columnname in enumerate(list(df.columns)):
        worksheet.write(0, columnnum, columnname, headercellformat)
    
        5
  •  4
  •   Alec Hanefeld    7 年前

    在熊猫0.20中,被接受的答案的解再次改变。

    应设置为“无”的格式可在以下位置找到:

    pandas.io.formats.excel.header_style
    
        6
  •  1
  •   divingTobi    5 年前

    如果您不想完全设置panda的标题样式,也可以传递 header=False ExcelWriter :

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.rand(3, 5), 
                      columns=pd.date_range('2019-01-01', periods=5, freq='M'))
    
    file_path='output.xlsx'
    writer = pd.ExcelWriter(file_path, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', header=False, index=False )
    workbook = writer.book
    fmt = workbook.add_format({'num_format': 'mm/yyyy', 'bold': True})
    worksheet = writer.sheets['Sheet1']
    worksheet.set_row(0, None, fmt)
    writer.save()
    
        7
  •  0
  •   Sven    4 年前

    不幸的是,addformat已经不可用了