我被要求生成一些Excel报告.我目前正在为我的数据大量使用pandas,所以我当然希望使用pandas.ExcelWriter方法来生成这些报告.但是固定的列宽是个问题.
到目前为止我的代码很简单.假设我有一个名为'df'的数据框:
writer = pd.ExcelWriter(excel_file_path)
df.to_excel(writer, sheet_name="Summary")
Run Code Online (Sandbox Code Playgroud)
我正在查看pandas代码,我真的没有看到任何设置列宽的选项.宇宙中有没有一个技巧可以使列自动调整到数据?或者我可以在xlsx文件之后做些什么来调整列宽?
(我正在使用OpenPyXL库,并生成.xlsx文件 - 如果这有任何区别.)
谢谢.
我试图写一个大熊猫DataFrame到一个.xlsx文件,其中不同的数值列将有不同的格式.例如,有些只会显示两个小数位,有些会显示无,有些会被格式化为带有"%"符号的百分比等.
我注意到DataFrame.to_html()有一个formatters参数允许人们这样做,将不同的格式映射到不同的列.但是,该DataFrame.to_excel()方法没有类似的参数.我们拥有的最多的是float_format所有数字都是全球性的.
我读过许多SO帖子,这些帖子至少部分与我的问题相关,例如:
openpyxl引擎一次应用一个单元格格式.这是我取得最大成功的方法.但这意味着编写循环以逐个单元格应用格式,记住偏移等.round()在写入Excel之前调用每一列来处理小数位格式- 这也有效,但我想避免更改数据.在pandas API中是否有其他更方便的与Excel相关的函数/属性可以在这里提供帮助,或类似的东西openpyxl,或者可能某种方式将输出格式元数据直接指定到每个列,DataFrame然后由不同的输出器在下游解释?
我正在使用 pandas Styler 类将某些列格式化为百分比。当我将输出写入 Excel 时,列仍然显示为浮点数。为什么我能够正确格式化和保存颜色,但不能正确格式化和保存百分比?
import pandas as pd
import numpy as np
def color_negative_red(val):
color = 'red' if val < 0 else 'black'
return 'color: %s' % color
np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],axis=1)
Run Code Online (Sandbox Code Playgroud)
这会产生这样的结果:
df.style.format('{:.2%}').applymap(color_negative_red)
Run Code Online (Sandbox Code Playgroud)
但保存到 Excel 会将百分比恢复为浮点数:
df.style.format('{:.2%}').applymap(color_negative_red).to_excel('format_test.xlsx')
Run Code Online (Sandbox Code Playgroud)
该怎么办?