【问题标题】:Openpyxl Merge cells with same value in one columnOpenpyxl在一列中合并具有相同值的单元格
【发布时间】:2020-05-06 18:16:17
【问题描述】:

我已将下面的数据框写入 excel 文件

df = {'name':  ['a', 'b', 'b', 'b', 'c', 'd', 'd', 'e'],
        'type': ['tiger', 'caterpillar', 'butterfly', 'butterfly', 'dolphin', 'tadpole', 'frog', 'dog'],
        'month1_weight': ['33', '0', '0', '0', '59', '3', '0', '0'],
        'month2_weight': ['0', '0', '20', '20', '65', '0', '10', '2'],
        }
dataframe = pd.DataFrame(df)

name      type         month1_weight  month2_weight
a         tiger        33             0
b         caterpillar  0              0
b         butterfly    0              20
b         butterfly    0              20
c         dolphin      59             65
d         tadpole      3              0
d         frog         0              10
e         dog          0              2

如何在Excel中合并名称列中的单元格,使其如下:

【问题讨论】:

    标签: python pandas merge openpyxl


    【解决方案1】:

    首先使用set_index(["name", "type"]) 将多级索引添加到您的数据框,然后使用pandas.ExcelWriter 对象,您可以将所需的数据框写入Excel 工作表。使用:

    from pandas import ExcelWriter
    
    dataframe = pd.DataFrame(df).set_index(["name", "type"])    
    with ExcelWriter("excel_file.xlsx") as writer:
        dataframe.to_excel(writer)
    

    执行上述代码后,excel_file 的内容应如下所示:


    编辑(见 cmets):

    替换:

    for col_num, value in enumerate(dataframe.columns.values): 
        worksheet_O.write(0, col_num + 1, value, header_format)
    

    与:

    for col_num, value in enumerate(dataframe.reset_index().columns): 
        worksheet_O.write(0, col_num, value, header_format) 
    

    【讨论】:

    • 我不知道为什么,但我这样做了,标题类型将被替换为 month_weight 并且整列的数量(month_1 weight)消失了。
    • 可以添加图片,显示执行上述代码后工作表的样子吗?
    • 您的问题中的 old_df 是什么?
    • writer = pd.ExcelWriter('excelfile.xlsx', engine='xlsxwriter') dataframe.to_excel(writer, sheet_name = 'Overview') workbook = writer.book worksheet_O = writer.sheets['Overview'] header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top', 'border': 1}) for col_num, value in enumerate(dataframe.columns.values): worksheet_O.write(0, col_num + 1, value, header_format) writer.save() writer.close()
    • old_df 是我的错字,抱歉...已更新
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    相关资源
    最近更新 更多