用不同的格式将pandasDataFrame写入Excel

我正在尝试将一个pandasDataFrame写入一个.xlsx文件,其中不同的数字列将具有不同的格式。 例如,一些只显示两位小数,一些显示没有,一些会被格式化为带有“%”符号的百分数等。

我注意到, DataFrame.to_html()有一个formatters参数,可以做到这一点,将不同的格式映射到不同的列。 但是, DataFrame.to_excel()方法没有类似的参数。 我们所拥有的最多的是一个对所有数字都是全局的float_format

我已经阅读了许多与我的问题至less部分相关的SOpost,例如:

  • 使用较旧的openpyxl引擎一次应用一个单元格的格式 。 这是我取得最大成功的方法。 但是,这意味着编写循环来应用格式逐个单元格,记住偏移量等。
  • 通过将表数据本身更改为string来渲染百分比 。 改变实际数据的路线激发了我在写入Excel之前,通过在每一列上调用round()来处理小数位格式化 – 这也起作用,但是我想避免改变数据。
  • 什么其他人,主要是关于date格式

在pandasAPI中有没有其他更方便的Excel相关函数/属性可以在这里帮助,或者在openpyxl类似的东西,或者有些方法可以将输出格式元数据直接指定到DataFrame中的每个列上,然后在不同的下游进行解释输出器?

你可以通过Pandas 0.16和XlsxWriter引擎来访问底层工作簿和工作表对象:

 import pandas as pd # Create a Pandas dataframe from some data. df = pd.DataFrame(zip( [1010, 2020, 3030, 2020, 1515, 3030, 4545], [.1, .2, .33, .25, .5, .75, .45], [.1, .2, .33, .25, .5, .75, .45], )) # Create a Pandas Excel writer using XlsxWriter as the engine. writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1') # Get the xlsxwriter objects from the dataframe writer object. workbook = writer.book worksheet = writer.sheets['Sheet1'] # Add some cell formats. format1 = workbook.add_format({'num_format': '#,##0.00'}) format2 = workbook.add_format({'num_format': '0%'}) format3 = workbook.add_format({'num_format': 'h:mm:ss AM/PM'}) # Set the column width and format. worksheet.set_column('B:B', 18, format1) # Set the format but not the column width. worksheet.set_column('C:C', None, format2) worksheet.set_column('D:D', 16, format3) # Close the Pandas Excel writer and output the Excel file. writer.save() 

输出:

在这里输入图像说明

另请参阅使用Python Pandas和XlsxWriter 。

正如你正确地指出应用格式到单个单元是非常低效的。

openpyxl 2.4包括本地支持pandas数据框和命名样式。

https://openpyxl.readthedocs.io/en/latest/changes.html#id7