【发布时间】:2019-12-17 12:35:21
【问题描述】:
我正在使用to_excel() 编写 DataFrames 以实现 excel。我认为,我需要使用 openpyxl 而不是 XlsxWriter 作为编写器引擎,因为我需要打开现有的 Excel 文件并添加工作表。无论如何,我对使用 openpyxl 的其他格式很感兴趣,所以我不热衷于更改。
这会写入 DataFrame,并格式化浮点数,但我不知道如何格式化 int dtype。
import pandas as pd
from openpyxl import load_workbook
df = pd.DataFrame({'county':['Cnty1','Cnty2','Cnty3'], 'ints':[5245,70000,4123123], 'floats':[3.212, 4.543, 6.4555]})
fileName = "Maryland - test.xlsx"
book = load_workbook(fileName)
writer = pd.ExcelWriter(fileName, engine='openpyxl')
writer.book = book
df.to_excel(writer, sheet_name='Test', float_format='%.2f', header=False, index=False, startrow=3)
ws = writer.sheets['Test']
writer.save()
writer.close()
试过用这个,但我认为它只适用于 XlsxWriter:
intFormat = book.add_format({'num_format': '#,###'})
ws.set_column('B:B', intFormat)
这种类型的东西可以通过循环逐个单元格地使用,但是有很多数据:
ws['B2'].number_format = '#,###'
【问题讨论】:
-
也许考虑将数据框的整数更改为千位格式的字符串,然后保存?
-
这适用于获取逗号格式的数字,但会产生一个新问题... Excel 在每个单元格(角落中的绿色三角形)中给出一个自动警告,表明它是一个以文本形式存储的数字。如果关闭自动警告,这不会发生,但这对我来说不是一个好选择。
-
没有真正的方法可以避免循环(无论是在您的代码中还是在库中),因为必须为每个单元格设置格式。但是使用类似
for cell in ws['B']: cell.number_format = '#,###'
标签: python pandas dataframe openpyxl