spa*_*ead 5 python excel pandas openpyxl
我试图写一个大熊猫DataFrame到一个.xlsx文件,其中不同的数值列将有不同的格式.例如,有些只会显示两个小数位,有些会显示无,有些会被格式化为带有"%"符号的百分比等.
我注意到DataFrame.to_html()有一个formatters参数允许人们这样做,将不同的格式映射到不同的列.但是,该DataFrame.to_excel()方法没有类似的参数.我们拥有的最多的是float_format所有数字都是全球性的.
我读过许多SO帖子,这些帖子至少部分与我的问题相关,例如:
openpyxl引擎一次应用一个单元格格式.这是我取得最大成功的方法.但这意味着编写循环以逐个单元格应用格式,记住偏移等.round()在写入Excel之前调用每一列来处理小数位格式- 这也有效,但我想避免更改数据.在pandas API中是否有其他更方便的与Excel相关的函数/属性可以在这里提供帮助,或类似的东西openpyxl,或者可能某种方式将输出格式元数据直接指定到每个列,DataFrame然后由不同的输出器在下游解释?
jmc*_*ara 10
您可以通过访问基础工作簿和工作表对象,使用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()
Run Code Online (Sandbox Code Playgroud)
输出:

另请参阅使用Python Pandas和XlsxWriter.