【问题标题】:Formatting integers with comma separator using openpyxl and to_excel使用 openpyxl 和 to_excel 使用逗号分隔符格式化整数
【发布时间】: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


【解决方案1】:

这可以通过使用 openpyxl.styles 中的 number_fomat 来解决

from openpyxl.styles import numbers

def sth():
   #This will output a number like: 2,000.00
   cell.number_format = numbers.FORMAT_NUMBER_COMMA_SEPARATED1

查看此链接以进一步阅读thedocs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2017-08-13
    • 2021-09-28
    • 2020-07-11
    相关资源
    最近更新 更多