gpt4 book ai didi

python - 更改 xlsxwriter 中 add_table 工作表编写器的数字格式

转载 作者:行者123 更新时间:2023-12-01 06:51:14 25 4
gpt4 key购买 nike

我想使用 python 将 Excel 表格中的数字格式从 1000,12 调整为欧洲风格(带千位分隔符):1.000,12

在 Excel 中,格式设置为:#.##0,00

当我想在我的工作簿中使用它时,xlsxwriter(扁平化是一个数据框表):

import xlsxwriter
workbook = xlsxwriter.Workbook('excel.xlsx', options={'nan_inf_to_errors': True})
worksheet1 = workbook.add_worksheet('table1')
numbersformat = workbook.add_format({'num_format': '#.##0,00'})
worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c} for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9',
'format': numbersformat})

我得到一个空数据框。无论何处导致表的结果:

worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c} for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9',})

我的数据框扁平化如下所示:

Department Name Month:1 Month:2 Month:All
Bistro Ama 82.75 82.75
Bistro Beb 100.00 212.00 312.00
All 182.75 212.00 394.75

最佳答案

I want to adjust my numbers format in my excel table from 1000,12 to the European style (with thousand separator): 1.000,12 with python.

In excel the format is set-up with: #.##0,00

此处的问题是,尽管格式显示为 #.##0,00,但 Excel 实际上将其存储为 #,##0.00(即,美国语言环境)。您的操作系统可能有一个默认的千位分隔符“。”和小数点分隔符“,”,Excel 在读取和显示值时将 #,##0.00 更改为 #.##0,00

如果您将代码更改为美国样式格式,您的程序应该按预期工作:

numbersformat = workbook.add_format({'num_format': '#,##0.00'})

更新:

您还在错误的位置添加了格式。它是列的属性,而不是整个表的属性。这是一个工作示例:


import pandas as pd
import xlsxwriter

flattened = pd.DataFrame({'Department': ['Bistro', 'Bistro', 'All'],
'Name': ['Ama', 'Beb', None],
'Month:1': [182.75, 1100.00, 1182.75],
'Month:2': ['', 1212.00, 1212.00],
'Month:All': [182.75, 2312.00, 2394.75]})

# Set the dataframe column order.
flattened = flattened[['Department', 'Name', 'Month:1',
'Month:2', 'Month:All']]

workbook = xlsxwriter.Workbook('excel.xlsx',
options={'nan_inf_to_errors': True})

worksheet1 = workbook.add_worksheet('table1')

# Make the columns wider for clarity.
worksheet1.set_column(1, flattened.shape[1], 11)

numbersformat = workbook.add_format({'num_format': '#,##0.00'})

worksheet1.add_table(3, 1, flattened.shape[0]+3, flattened.shape[1],
{'data': flattened.values.tolist(),
'columns': [{'header': c, 'format': numbersformat}
for c in flattened.columns.tolist()],
'style': 'Table Style Medium 9'})

workbook.close()

输出:

enter image description here

当 Windows 或 macOS 区域设置使用“,”作为小数点分隔符和“.”时,这是同一个文件。作为千位分隔符:

enter image description here

XlsxWriter 文档中解释了差异:Number Formats in different locales .

关于python - 更改 xlsxwriter 中 add_table 工作表编写器的数字格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58995944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com