[英]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.