pandas 和 pandas 锁定之外的 Xlsxwriter
Xlsxwriter in pandas and outside of pandas lockout
我正在使用 xlsxwriter 引擎将一些数据帧推送到 excel sheet 和 pandas.to_excel(),但我需要在每个 table 上方添加标题。
这是我想要达到的结果的示例:
我没有看到任何方法可以使用 ExcelWriter object of pandas 来简单地操作每个单元格的内容,当我尝试这样做时,我得到:
Exception: Sheetname 'sample', with case ignored, is already in use.
我猜 xlsxwriter 自己锁定了它。这是一个例子:
xlsx_writer = pd.ExcelWriter(
get_target_filepath(xlsx_name),
engine='xlsxwriter'
)
workbook = xlsx_writer.book
worksheet = workbook.add_worksheet(sheet_name)
worksheet.write(1, 1, 'ABC')
_, sample_table = dataframe_tuples[0]
sample_table.to_excel(xlsx_writer, startrow=3, startcol=2, sheet_name=sheet_name)
我可以保存数据帧并使用 openpyxl 再次检查它,但我非常不喜欢他们格式化的方式,这是我接下来要做的,如果我在 xlsxwriter 中格式化它然后用 openpyxl 重新打开它,它不能正确保存格式,openpyxl 毁了它。
我无法将 excel 本身放到服务器上以使用 VBA 宏进行样式设置。
有什么办法解决这个问题,还是我只是做错了什么可怕的事情?
尝试使用多级列:
In [137]: df
Out[137]:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
In [138]: df.columns = pd.MultiIndex.from_product([['Caption'], df.columns])
In [139]: df
Out[139]:
Caption
A B C
0 1 2 3
1 4 5 6
2 7 8 9
In [140]: df.to_excel('c:/temp/a.xlsx')
结果:
您可以通过从 pandas 获取工作表引用并在其上调用标准 XlsxWriter 方法来执行以下操作。像这样:
import pandas as pd
# Create some Pandas dataframes from some data.
df1 = pd.DataFrame({'Data': [11, 12, 13, 14]})
df2 = pd.DataFrame({'Data': [21, 22, 23, 24]})
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_example.xlsx', engine='xlsxwriter')
# Position the dataframes in the worksheet.
df1.to_excel(writer, sheet_name='Sheet1', index=False, startrow=2)
df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=9)
# Get the worksheet object.
worksheet = writer.sheets['Sheet1']
# Write some titles above the dataframes.
worksheet.write(1, 0, 'Some random title 1')
worksheet.write(8, 0, 'Some random title 2')
# Close the Pandas Excel writer and output the Excel file.
writer.save()
另见 Working with Python Pandas and XlsxWriter。
输出:
我正在使用 xlsxwriter 引擎将一些数据帧推送到 excel sheet 和 pandas.to_excel(),但我需要在每个 table 上方添加标题。
这是我想要达到的结果的示例:
我没有看到任何方法可以使用 ExcelWriter object of pandas 来简单地操作每个单元格的内容,当我尝试这样做时,我得到:
Exception: Sheetname 'sample', with case ignored, is already in use.
我猜 xlsxwriter 自己锁定了它。这是一个例子:
xlsx_writer = pd.ExcelWriter(
get_target_filepath(xlsx_name),
engine='xlsxwriter'
)
workbook = xlsx_writer.book
worksheet = workbook.add_worksheet(sheet_name)
worksheet.write(1, 1, 'ABC')
_, sample_table = dataframe_tuples[0]
sample_table.to_excel(xlsx_writer, startrow=3, startcol=2, sheet_name=sheet_name)
我可以保存数据帧并使用 openpyxl 再次检查它,但我非常不喜欢他们格式化的方式,这是我接下来要做的,如果我在 xlsxwriter 中格式化它然后用 openpyxl 重新打开它,它不能正确保存格式,openpyxl 毁了它。
我无法将 excel 本身放到服务器上以使用 VBA 宏进行样式设置。
有什么办法解决这个问题,还是我只是做错了什么可怕的事情?
尝试使用多级列:
In [137]: df
Out[137]:
A B C
0 1 2 3
1 4 5 6
2 7 8 9
In [138]: df.columns = pd.MultiIndex.from_product([['Caption'], df.columns])
In [139]: df
Out[139]:
Caption
A B C
0 1 2 3
1 4 5 6
2 7 8 9
In [140]: df.to_excel('c:/temp/a.xlsx')
结果:
您可以通过从 pandas 获取工作表引用并在其上调用标准 XlsxWriter 方法来执行以下操作。像这样:
import pandas as pd
# Create some Pandas dataframes from some data.
df1 = pd.DataFrame({'Data': [11, 12, 13, 14]})
df2 = pd.DataFrame({'Data': [21, 22, 23, 24]})
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_example.xlsx', engine='xlsxwriter')
# Position the dataframes in the worksheet.
df1.to_excel(writer, sheet_name='Sheet1', index=False, startrow=2)
df2.to_excel(writer, sheet_name='Sheet1', index=False, startrow=9)
# Get the worksheet object.
worksheet = writer.sheets['Sheet1']
# Write some titles above the dataframes.
worksheet.write(1, 0, 'Some random title 1')
worksheet.write(8, 0, 'Some random title 2')
# Close the Pandas Excel writer and output the Excel file.
writer.save()
另见 Working with Python Pandas and XlsxWriter。
输出: