rha*_*ett 10 python excel pandas
在使用Pandas之前写入csv时,我经常会使用以下格式来表示百分比:
'%0.2f%%' % (x * 100)
Run Code Online (Sandbox Code Playgroud)
加载csv时,这将由Excel正确处理.
现在,我正在尝试使用Pandas的to_excel函数并使用
(simulated * 100.).to_excel(writer, 'Simulated', float_format='%0.2f%%')
Run Code Online (Sandbox Code Playgroud)
并得到一个"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()
Run Code Online (Sandbox Code Playgroud)
这是我使用带有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()
Run Code Online (Sandbox Code Playgroud)
有关更多数字格式,请参阅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()
Run Code Online (Sandbox Code Playgroud)
注意 1:要格式化为百分比的列必须是比率浮点数(即不要将其乘以 100)。
注 2:set_column() 调用中设置的参数None是列宽。如果您想自动适应列宽,请查看这篇文章:
/sf/answers/4313248481/。
注 3:如果您想了解有关 set_column() 函数的更多信息,可以查看文档:
https://xlsxwriter.readthedocs.io/worksheet.html?highlight =set_column#set_column
| 归档时间: |
|
| 查看次数: |
4112 次 |
| 最近记录: |