Python 创建表时列标题不可见

Python 创建表时列标题不可见,python,pandas,xlsxwriter,Python,Pandas,Xlsxwriter,我有下面的脚本,它接受一个xls文件并创建一个带有表(格式化为实际表)的xlsx。列标题在最终表中显示为Column1 Column2等,而不是dataframe中的实际标题 有办法解决这个问题吗?我还发现自己创建了一个临时xlsx文件,将其复制到表中,并删除了临时版本。有没有可能进一步简化这项工作 代码: 导入列标题: dictonary = r"C:\Users\xxxx\Dictionary - Column Headers.xlsx" dfd = pd.read_excel(dicto

我有下面的脚本,它接受一个xls文件并创建一个带有表(格式化为实际表)的xlsx。列标题在最终表中显示为Column1 Column2等,而不是dataframe中的实际标题

有办法解决这个问题吗?我还发现自己创建了一个临时xlsx文件,将其复制到表中,并删除了临时版本。有没有可能进一步简化这项工作

代码:

导入列标题:

dictonary = r"C:\Users\xxxx\Dictionary - Column Headers.xlsx"

dfd = pd.read_excel(dictonary, sheet_name = 'Demand')
dict1 = dfd.to_dict()

从xlsxwriter的文档中:

这意味着您可以在add_table方法的字典中添加另一个键'columns',以重命名标题

以下是重命名了标题的表的示例:

import pandas as pd

df = pd.DataFrame({'Name': ['John','George','Paul'],
                    'Age': [23,34,42]})

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# This will create a basic table with the headers named as 'Column 1' etc
#worksheet.add_table('A1:B4', {'data': df.values.tolist()})

# Add the 'columns' argument to name the headers
worksheet.add_table('A1:B4', {'data': df.values.tolist(),
                    'columns': [{'header': 'Name'},
                                {'header': 'Age'}]})

writer.save()
输出:

编辑

如果您的数据帧是从文件导入的,并且您不想手动键入所有标头名称,则可以执行以下操作:
'columns':[{'header':df.columns[0]},{'header':df.columns[1]}]
等,或者更好地声明一个变量并为其分配一个列表:

header_names = [{'header': df.columns[x]} for x in range(df.shape[1])]
那么你只需要做:

worksheet.add_table('A1:B4', {'data': df.values.tolist(),
                    'columns': header_names})

我曾尝试将列标题作为字典加载,但在将所有内容都等同于“标题”时遇到了问题:___;。每当我加载数据(70列标题)时,它都会加载为“标题”:(标题1):(标题2):(标题2)等等。我该如何避免这种情况?抱歉,我不能确切地理解问题是什么,标题是否显示为下划线符号?您应该创建一个最小的示例并与他人共享,您的代码中包含我们无法访问的文件。除了最后一部分之外,所有内容对我都有意义。。我想从Excel文件导入名称,而不是像上面那样在每个列标题中手动输入脚本('columns':[{'header':'Name'},{'header':'Age'}])。这可能吗?检查我的答案,我编辑它来回答你的问题
header_names = [{'header': df.columns[x]} for x in range(df.shape[1])]
worksheet.add_table('A1:B4', {'data': df.values.tolist(),
                    'columns': header_names})