使用Pandas在Excel中编写百分比

时间:2013-08-07 23:54:36

标签: python excel pandas

在使用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

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分: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 documentation

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