xlsxwriter .add_table() 设置列适用于一个数据帧,但不适用于另一个数据帧

问题描述 投票:0回答:1

我正在尝试使用 python 库 xlsxwriter 在 Excel 中添加数据表

我的数据框名为

whole
有 26 列(正是字母表中的字母),所以我尝试使用以下代码设置它们:

workbook = xlsxwriter.Workbook(f'workbook.xlsx', {"nan_inf_to_errors": True})
worksheet = workbook.add_worksheet("Column Setter")

worksheet.add_table(f"A1:{chr(ord('@')+len(whole.columns))}{len(whole)}", {'data': 
whole.values.tolist(),
                'banded_columns': True, 'banded_rows': False, 'header_row': True, 
                 'columns': [{'header': col} for col in whole.columns.tolist()]})
worksheet.autofit()

但是输出似乎将所有列名称设置为 Column1 等。

这段代码似乎非常适合另一个具有 3 列的数据框,所以我很难理解为什么这不起作用。任何答案都会非常有帮助。

python xlsxwriter
1个回答
0
投票

它应该按预期工作。这是一个基于您的示例数据框的示例:

import pandas as pd
import xlsxwriter

# Create a Pandas dataframe from some sample data.
data = {}
for num in range(1, 27):
    data[f"Data {num}"] = [1, 2, 3, 4, 5]

whole = pd.DataFrame(data)

# Create a workbook and worksheet.
workbook = xlsxwriter.Workbook(f"workbook.xlsx", {"nan_inf_to_errors": True})
worksheet = workbook.add_worksheet("Column Setter")

# Get the dimensions of the dataframe.
(max_row, max_col) = whole.shape

# Add the Excel table structure.
worksheet.add_table(0, 0, max_row, max_col - 1,
    {
        "data": whole.values,
        "banded_columns": True,
        "banded_rows": False,
        "header_row": True,
        "columns": [{"header": col} for col in whole.columns],
    },
)

worksheet.autofit()

workbook.close()

输出看起来像预期的那样:

我不知道这是否是您输出中的一个因素,但最好对表维度使用 (row, col) 语法,而不是尝试构造 A1 样式字符串。此外,示例中的

tolist()
方法调用不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.