使用 Pandas 在 Excel 中写入百分比

Posted

技术标签:

【中文标题】使用 Pandas 在 Excel 中写入百分比【英文标题】:Writing Percentages in Excel Using Pandas 【发布时间】:2013-08-09 13:24:47 【问题描述】:

在使用 Pandas 之前写入 csv 文件时,我通常会使用以下百分比格式:

'%0.2f%%' % (x * 100)

这将在加载 csv 时由 Excel 正确处理。

现在,我正在尝试使用 Pandas 的 to_excel 函数并使用

(simulated * 100.).to_excel(writer, 'Simulated', float_format='%0.2f%%')

并获得“ValueError:float() 的无效文字:0.0126%”。没有 '%%' 它写得很好,但没有格式化为百分比。

有没有办法在 Pandas 的 to_excel 中写入百分比?

这个问题现在已经很老了。如需更好的解决方案,请查看xlsxwriter working with pandas。

【问题讨论】:

我认为是一个“错误”。在github.com/pydata/pandas打开一个问题... 仅供参考,我什至无法使用 pandas-0.12.0 获得它的格式 感谢您的浏览。看来我得等几个版本了。 此时这已经相当老了。此链接有更强大的解决方案xlsxwriter.readthedocs.io/working_with_pandas.html 【参考方案1】:

您可以执行以下解决方法来完成此操作:

df *= 100
df = pandas.DataFrame(df, dtype=str)
df += '%'

ew = pandas.ExcelWriter('test.xlsx')
df.to_excel(ew)
ew.save()

【讨论】:

此解决方案是否会在 Excel 工作表的单元格中生成字符串?这是相当不利的……不是吗? @Dror 好点...我测试过,生成的 Excel 表有数字,而不是字符串 我试过了,Excel 用“数字存储为文本”标记单元格。【参考方案2】:

这是我在 OpenPyXL v2.2 中使用 pandas 得出的解决方案,并确保单元格末尾包含数字,而不是字符串。将值保持为浮点数,逐个单元格地在末尾应用格式(警告:效率不高):

xlsx = pd.ExcelWriter(output_path)
df.to_excel(xlsx, "Sheet 1")
sheet = xlsx.book.worksheets[0]
for col in sheet.columns[1:sheet.max_column]:
    for cell in col[1:sheet.max_row]:
        cell.number_format = '0.00%'
        cell.value /= 100 #if your data is already in percentages, has to be fractions
xlsx.save()

更多数字格式请参见OpenPyXL documentation。

有趣的是,文档表明 OpenPyXL 足够聪明,可以从格式化为“1.23%”的字符串中猜测百分比,但这对我来说不会发生。我在 Pandas 的 _Openpyxl1Writer 中找到了在字符串上使用“set_value_explicit”的代码,但对于其他版本则没有。如果有人想查明真相,值得进一步调查。

【讨论】:

以上是关于使用 Pandas 在 Excel 中写入百分比的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 在 python 中将值写入 excel

关于在python中使用pandas模块将列表list/元组tuple写入excel中

关于如何使用pandas将不同的数据写入到同一个Excel的不同Sheet表中

利用POI操作Excel实现百万数据写入

使用 Python/Pandas 将多索引数据写入 excel 文件

使用 Pandas 使用 for 循环写入 Excel CSV