如何将 pandas DataFrame 样式化为 excel 文件
How to style a pandas DataFrame into an excel file
我正在尝试构建一个将数据写入 excel 文件的应用程序。因此,我尝试使用 pandas
库并使用 xlsxwriter
引擎。我从 pandas 库中阅读了有关 Styler
object 的文档,但我找不到修改 table headers 样式的方法(或列 headers,我提供给 DataFrame 构造函数的字典的键)。事实上,我认为 set_table_styles
方法在我的情况下效果不佳。
这是我的代码 运行:
import os
import pandas
writer = pandas.ExcelWriter(f"{os.getcwd()}\Styled_excel.xlsx", engine="xlsxwriter", mode='w')
data_frame = pandas.DataFrame({"Pressure": [10, 20, 30, 50],
"Volume": [10, 8, 5, 2]})
styler = data_frame.style
styler.set_properties(**{'color': 'red', 'border-color': 'black', 'border-width': "1px"})
styler.set_table_styles([{'selector': 'th', 'props': [('font-weight', 'normal')]}])
styler.to_excel(excel_writer=writer, sheet_name="Feuil1", startrow=4, startcol=2, index=False)
writer.save()
虽然 set_properties
按预期工作,但 set_table_styles
似乎没有应用我想要的样式,这是包含“压力”和“音量”的单元格的正常字体粗细.
关于同一主题,我在文档中的任何地方都找不到以编程方式更改列宽的方法,是不支持吗?
如果您对我可能做错了什么或为什么它不起作用有任何线索,我提前感谢您的回答。
保罗
编辑:我确实找到了我遇到的问题的答案,但如果有人解释为什么我以前的代码没有按预期工作,我会很高兴听到它(但我认为这是由于事实上 set_table_styles
方法只能在呈现 html 页面或在 Jupyter Notebook 中显示 table 时使用)
我在 xlsxwriter documentation 上找到了解决我的两个问题的方法(在我发布这个问题之前我不知道它存在):
workbook = writer.book
worksheet = writer.sheets['Feuil1']
# Creation of format for the column headers
header_format = workbook.add_format({
'bold': False,
'border': 1})
# Writing the column headers only and applying the style with the format created
for col_num, value in enumerate(data_frame.columns.values):
worksheet.write_string(0, col_num, value, header_format)
# Widening a column to fully fit a string in it
worksheet.set_column('C:C', 10)
我正在尝试构建一个将数据写入 excel 文件的应用程序。因此,我尝试使用 pandas
库并使用 xlsxwriter
引擎。我从 pandas 库中阅读了有关 Styler
object 的文档,但我找不到修改 table headers 样式的方法(或列 headers,我提供给 DataFrame 构造函数的字典的键)。事实上,我认为 set_table_styles
方法在我的情况下效果不佳。
这是我的代码 运行:
import os
import pandas
writer = pandas.ExcelWriter(f"{os.getcwd()}\Styled_excel.xlsx", engine="xlsxwriter", mode='w')
data_frame = pandas.DataFrame({"Pressure": [10, 20, 30, 50],
"Volume": [10, 8, 5, 2]})
styler = data_frame.style
styler.set_properties(**{'color': 'red', 'border-color': 'black', 'border-width': "1px"})
styler.set_table_styles([{'selector': 'th', 'props': [('font-weight', 'normal')]}])
styler.to_excel(excel_writer=writer, sheet_name="Feuil1", startrow=4, startcol=2, index=False)
writer.save()
虽然 set_properties
按预期工作,但 set_table_styles
似乎没有应用我想要的样式,这是包含“压力”和“音量”的单元格的正常字体粗细.
关于同一主题,我在文档中的任何地方都找不到以编程方式更改列宽的方法,是不支持吗?
如果您对我可能做错了什么或为什么它不起作用有任何线索,我提前感谢您的回答。
保罗
编辑:我确实找到了我遇到的问题的答案,但如果有人解释为什么我以前的代码没有按预期工作,我会很高兴听到它(但我认为这是由于事实上 set_table_styles
方法只能在呈现 html 页面或在 Jupyter Notebook 中显示 table 时使用)
我在 xlsxwriter documentation 上找到了解决我的两个问题的方法(在我发布这个问题之前我不知道它存在):
workbook = writer.book
worksheet = writer.sheets['Feuil1']
# Creation of format for the column headers
header_format = workbook.add_format({
'bold': False,
'border': 1})
# Writing the column headers only and applying the style with the format created
for col_num, value in enumerate(data_frame.columns.values):
worksheet.write_string(0, col_num, value, header_format)
# Widening a column to fully fit a string in it
worksheet.set_column('C:C', 10)