ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python xlsxwriter:添加表时将标题保留在excel中

2019-06-08 21:44:58  阅读:576  来源: 互联网

标签:python excel pandas xlsxwriter tableheader


我有一个panda数据帧,我写入xslx文件,并希望在该数据上添加一个表.我还想保留我已经编写的标题,而不是再次添加它们.那可能吗?

例:

import pandas as pd
import xlsxwriter as xw

# random dataframe
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 'two' : pd.Series([5., 6., 7., 8.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)


# write data to file
writer = pd.ExcelWriter("test.xlsx", engine='xlsxwriter')
df.to_excel(writer,"sheet without table")
df.to_excel(writer,"sheet with table")
df.to_excel(writer,"sheet with table and header")

# get sheets to add the tables
workbook  = writer.book
worksheet_table = writer.sheets['sheet with table']
worksheet_table_header = writer.sheets['sheet with table and header']

# the range in which the table is
end_row = len(df.index)
end_column = len(df.columns)
cell_range = xw.utility.xl_range(0, 0, end_row, end_column)


# add the table that will delete the headers
worksheet_table.add_table(cell_range,{'header_row': True,'first_column': True})

######################################
# The hack

# Using the index in the Table
df.reset_index(inplace=True)
header = [{'header': di} for di in df.columns.tolist()]
worksheet_table_header.add_table(cell_range,{'header_row': True,'first_column': True,'columns':header})

writer.save()

解决方法:

黑客/解决方案是唯一的选择(从@jmcnamara可以看出).简而言之就是:

import pandas as pd
import xlsxwriter as xw

# random dataframe
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 'two' : pd.Series([5., 6., 7., 8.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)


# write data to file
writer = pd.ExcelWriter("test.xlsx", engine='xlsxwriter')
df.to_excel(writer,"sheet with table and header")

# get sheets to add the tables
workbook  = writer.book
worksheet_table_header = writer.sheets['sheet with table and header']

# the range in which the table is
end_row = len(df.index)
end_column = len(df.columns)
cell_range = xw.utility.xl_range(0, 0, end_row, end_column)

######################################
# The hack

# Using the index in the Table
df.reset_index(inplace=True)
header = [{'header': di} for di in df.columns.tolist()]
worksheet_table_header.add_table(cell_range,{'header_row': True,'first_column': True,'columns':header})

writer.save()

标签:python,excel,pandas,xlsxwriter,tableheader
来源: https://codeday.me/bug/20190608/1200578.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有