Python 从Pandas写入Excel时设置默认数字格式
我希望在从数据框写入Excel时设置默认的数字格式。这可能吗 我可以使用以下内容设置默认日期/日期时间\格式,但找不到设置默认数字格式的方法Python 从Pandas写入Excel时设置默认数字格式,python,python-3.x,pandas,openpyxl,xlsxwriter,Python,Python 3.x,Pandas,Openpyxl,Xlsxwriter,我希望在从数据框写入Excel时设置默认的数字格式。这可能吗 我可以使用以下内容设置默认日期/日期时间\格式,但找不到设置默认数字格式的方法 writer = pd.ExcelWriter(f'{file_variable}.xlsx', engine='xlsxwriter',datetime_format='MM/DD/YYYY') 否则,我假设我必须将工作表分配给变量,并循环指定列的行以设置数字格式。我得到了这种格式,浮动到小数点后1位 writer = pd.ExcelWriter(f
writer = pd.ExcelWriter(f'{file_variable}.xlsx', engine='xlsxwriter',datetime_format='MM/DD/YYYY')
否则,我假设我必须将工作表分配给变量,并循环指定列的行以设置数字格式。我得到了这种格式,浮动到小数点后1位
writer = pd.ExcelWriter(f'{file_variable}.xlsx', engine='xlsxwriter',datetime_format='MM/DD/YYYY')
data = {'A Prime': {0: 3.26, 1: 3.24, 2: 3.22, 3: 3.2, 4: 3.18, 5: 3.16,
6: 3.14, 7: 1.52, 8: 1.5, 9: 1.48, 10: 1.46, 11: 1.44, 12: 1.42},
'B': {0: 0.16608, 1: 0.16575, 2: 0.1654, 3: 0.16505999999999998, 4: 0.1647, 5: 0.16434, 6: 0.16398, 7: 0.10759, 8: 0.10687, 9: 0.10614000000000001,
10: 0.10540999999999999, 11: 0.10469, 12: 0.10396}, 'Proto Name': {0: 'Alpha',
1: 'Alpha', 2: 'Alpha', 3: 'Alpha', 4: 'Alpha', 5: 'Alpha', 6: 'Alpha', 7: 'Bravo', 8: 'Bravo', 9: 'Bravo', 10: 'Bravo', 11: 'Bravo', 12: 'Bravo'}}
import pandas as pd
df = pd.DataFrame(data)
A Prime B Proto Name
0 3.26 0.16608 Alpha
1 3.24 0.16575 Alpha
2 3.22 0.16540 Alpha
3 3.20 0.16506 Alpha
4 3.18 0.16470 Alpha
5 3.16 0.16434 Alpha
6 3.14 0.16398 Alpha
7 1.52 0.10759 Bravo
8 1.50 0.10687 Bravo
9 1.48 0.10614 Bravo
10 1.46 0.10541 Bravo
11 1.44 0.10469 Bravo
12 1.42 0.10396 Bravo
writer = pd.ExcelWriter(r'c:\temp\output.xlsx')
# This method will truncate the data past the first decimal point
df.to_excel(writer,'Sheet1',float_format = "%0.1f")
writer.save()
但这也许不是所有的情况——对更大的数字和成千上万的人来说,没有乐趣
df.to_excel(writer,'Sheet1',float_format = ":,")
然而,以下方法似乎有效
data = {'A Prime': {0: 326000, 1: 3240000}}
df = pd.DataFrame(data)
A Prime
0 326000
1 3240000
writer = pd.ExcelWriter(r'c:\temp\output.xlsx')
df.to_excel(writer,'Sheet1')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
format1 = workbook.add_format({'num_format': '#,##0.00'})
worksheet.set_column('B', 18, format1)
#Alternatively, you could specify a range of columns with 'B:D' and 18 sets the column width
writer.save()
这里的所有内容:因为这个问题也被标记为openpyxl,所以您还可以在openpyxl中编辑整个工作簿的默认样式。这可能对数字格式有意义,但如果字体大小等更改,可能会产生意外后果,因为其他GUI元素会受到影响。如果小心使用,以下各项应起作用
wb._named_styles['Normal'].number_format = '#,##0.00'
感谢ChrisG对这篇文章的更新,让它更清晰。对于未来的读者,我更喜欢第二种方法,而不是第一种方法。谢谢@Dickster,不知何故我错过了readthedocs页面上的那一部分。非常感谢。