11

在使用 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 中写入百分比?

这个问题在这一点上已经很老了。如需更好的解决方案,请查看使用 pandas 的 xlsxwriter

4

2 回答 2

7

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

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

ew = pandas.ExcelWriter('test.xlsx')
df.to_excel(ew)
ew.save()
于 2013-10-16T17:54:51.397 回答
6

这是我在 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 文档

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

于 2016-08-18T04:17:19.647 回答