使用pandas在Excel中编写百分比

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

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

 df *= 100 df = pandas.DataFrame(df, dtype=str) df += '%' ew = pandas.ExcelWriter('test.xlsx') df.to_excel(ew) ew.save() 

这是我使用OpenPyXL v2.2使用pandas的解决scheme,确保单元最后包含数字,而不是string。 将值保存为浮点数,在单元格的末尾处应用格式(警告:无效):

 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文档 。

有趣的是,docosbuild议OpenPyXL足够聪明地猜测string格式化为“1.23%”的百分比,但这不会发生在我身上。 我在Pandas的_Openpyxl1Writer中find了在string上使用“set_value_explicit”的代码,但是没有其他版本的代码。 值得进一步调查,如果有人想深究这一点。