繁体   English   中英

使用 Pandas 在 Excel 中写入百分比

[英]Writing Percentages in Excel Using Pandas

在使用 Pandas 之前写入 csv 时,我经常使用以下格式来表示百分比:

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

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

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

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

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

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

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

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

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

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

这是我使用带有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”的代码,但对于其他版本却没有。 如果有人想要深究这一点,值得进一步调查。

XlsxWriter 文档有一个关于如何实现此目的的有用示例: https://xlsxwriter.readthedocs.io/example_pandas_percentage.html

这是要点:

writer = pd.ExcelWriter('pandas_percent.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')
percent_format = writer.book.add_format({'num_format': '0%'})
# Now apply the number format to the column with index 2.
writer.sheets['Sheet1'].set_column(2, 2, None, percent_format)
writer.save()

注意 1:您要格式化为百分比的列必须是比率浮点数(即不要将其乘以 100)。
注意 2: set_column() 调用中设置为None的参数是列宽。 如果您想自动适应列宽,请查看这篇文章: https://stackoverflow.com/a/61617835/13261722
Note 3: If you want more on the set_column() function you can check out the docs: https://xlsxwriter.readthedocs.io/worksheet.html?highlight=set_column#set_column

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM