【问题标题】:Pandas dataframe. Add an aditional row header merging all columns熊猫数据框。添加合并所有列的附加行标题
【发布时间】:2021-09-04 23:52:29
【问题描述】:

我想使用 pandas 数据框向我的 excel 添加一个“第二个”标题。 excel有他的价值观和标题。但我想在标题上方添加一个新行,只有一列(所有列标题的大小)。并且文本居中。 像这样的:

我该怎么做?

【问题讨论】:

    标签: python excel pandas dataframe xlsxwriter


    【解决方案1】:

    使用MultiIndex.from_product,但文字不居中:

    df.columns = pd.MultiIndex.from_product([['Result'], df.columns])
    

    编辑:

    import string
    
    # Creating a DataFrame
    df = pd.DataFrame(np.random.randn(8, 6), columns=list('ABCDEF'))
    
    
    # Create a Pandas Excel writer using XlsxWriter engine.
    writer = pd.ExcelWriter("test.xlsx", engine='xlsxwriter')
    
    # Create custom style
    df.to_excel(writer, sheet_name='Sheet1', startrow=1, index=False)
    
    # Get workbook and worksheet objects
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    
    merge_format = workbook.add_format({'align': 'center'})
    
    len_cols = len(df.columns)
    #set merge_range by length of colums names
    len_cols = len(df.columns)
    worksheet.merge_range(0, 0, 0, len_cols - 1, 'Result', merge_format)
    
    writer.save()
    

    【讨论】:

    • 我有这个错误:NotImplementedError: Writing to Excel with MultiIndex columns and no index ('index'=False) 尚未实现。
    • 非常感谢!!!有用!!但我有一个问题:“d = dict(enumerate(string.ascii_uppercase, 1))”和“worksheet.merge_range(f'A1:{d[len_cols]}1', 'Result', merge_format)”如何工作?我不明白那些台词。另外,为什么我们将 startrow=1 放在 to_excel 方法中?再次感谢您。
    • @Keras-JOB - 这是个小把戏。 Excel 需要定义最后一列名称。这里F1 按列的长度。因此使用字典d 进行映射。所以6:'F'在dict中通过寻找6生成F
    • @Keras-JOB - 所以可能动态生成列名(如果不像 26 那样大,Z 是什么)
    • 注意merge_range() 支持(row, col) 表示法,所以在这里使用它会更容易,如worksheet.merge_range(0, 0, 0, len_cols - 1)。请参阅:xlsxwriter.readthedocs.io/worksheet.html#worksheet-merge-range
    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 2019-06-16
    • 2018-02-12
    • 2021-04-19
    • 2020-04-27
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多