本文共 4325 字,大约阅读时间需要 14 分钟。
以下是用于演示的数据集:
from datetime import datetime, dateimport pandas as pddata = { 'Date and time': [ datetime(2015, 1, 1, 11, 30, 55), datetime(2015, 1, 2, 1, 20, 33), datetime(2015, 1, 3, 11, 10), datetime(2015, 1, 4, 16, 45, 35), datetime(2015, 1, 5, 12, 10, 15) ], 'Dates only': [date(2015, 2, 1), date(2015, 2, 2), date(2015, 2, 3), date(2015, 2, 4), date(2015, 2, 5)], 'Numbers': [1010, 2020, 3030, 2020, 1515], 'Percentage': [0.1, 0.2, 0.33, 0.25, 0.5]}df = pd.DataFrame(data)df['final'] = [f"=C{i}*D{i}" for i in range(2, len(df))] 使用 df.to_excel() 简单保存数据:
writer = pd.ExcelWriter('demo1.xlsx', sheet_name='Sheet1', index=False)df.to_excel(writer)writer.save() 如果需要自定义日期格式,可以使用 date_format 和 datetime_format 参数:
writer = pd.ExcelWriter('demo1.xlsx', datetime_format='mmm d yyyy hh:mm:ss', date_format='mmmm dd yyyy')df.to_excel(writer, sheet_name='Sheet1', index=False)writer.save() 如果需要对指定列的数据设置文字颜色或背景色,可以使用 pandas/styler 工具:
style_df = df.style# 设置 Date and time 列颜色style_df.applymap(lambda x: 'color:red', subset=['Date and time'])# 设置 Dates only 列颜色style_df.applymap(lambda x: 'color:green', subset=['Dates only'])# 设置 Numbers 列背景色style_df.applymap(lambda x: 'background-color:#ADD8E6', subset=['Numbers'])# 设置 Percentage 列颜色渐变style_df.background_gradient(cmap='PuBu', low=0, high=0.5, subset=['Percentage'])
如果需要对数值数据进行格式化,可以使用 xlsxwriter 的一些高级功能:
import xlsxwriterfrom openpyxl import Workbookworkbook = Workbook('demo.xlsx')worksheet = workbook.active# 设置单元格样式header_font = Font(name='微软雅黑', bold=True)# 为表头设置样式for cell in worksheet['A1:E1']: cell.font = header_font# 为数值列设置自定义格式header.DateFormat = NumberFormat('#,##0.00')middle.DateFormat = NumberFormat('0%')# 为最后一列设置宽度worksheet['E:E'].column_dimensions.width = 9workbook.save() 使用 openpyxl 作为引擎,推荐用于更复杂格式的保存:
from openpyxl import Workbookimport pandas as pdwriter = pd.ExcelWriter('demo.xlsx', engine='openpyxl')df.to_excel(writer, sheet_name='Sheet1', index=False)worksheet = writer.sheets['Sheet1']# 设置列宽for i, width in enumerate(df.columns.to_series().str.len(), 1): col_letter = get_column_letter(i) worksheet.column_dimensions[col_letter].width = widthwriter.save() 如果需要基于模板文件写入数据,可以直接使用 openpyxl 的 API:
from openpyxl import load_workbookimport pandas as pd# 假设 'template.xlsx' 是带有特定格式的模板文件template_workbook = load_workbook('template.xlsx')template_worksheet = template_workbook.active# 假设要写入的数据df = pd.read_excel('data.xlsx')for row in range(len(df)): for col in range(len(df.columns)): template_worksheet.cell(row=row+2, column=col+2).value = df.iloc[row, col]# 自定义设置# (如果需要,可以在这里添加更多格式设置)template_workbook.save('result.xlsx') 为了让列自动调整合适的宽度,可以使用以下方法:
from openpyxl import Calculateimport pandas as pdcolumn_widths = df.columns.to_series().str.len().valuesmax_width = df.astype(str).apply(lambda x: len(str(x))).max()widths = max(max_width, max(column_widths)) writer = pd.ExcelWriter('auto_width.xlsx', engine='xlsxwriter') df.to_excel(writer, sheet_name='Sheet1', index=False) for col in range(len(df.columns)): col_str = get_column_letter(col+1) writer.sheets['Sheet1'].column_dimensions[col_str].width = widths writer.save() from openpyxl import Workbook, get_column_letterimport pandas as pdcolumn_widths = df.columns.to_series().str.len().valuesmax_width = df.astype(str).apply(lambda x: len(str(x))).max()widths = list(max_width) + [max_width] * len(df.columns)workbook = Workbook('auto_width.xlsx')worksheet = workbook.activefor i, width in enumerate(widths, 1): column_letter = get_column_letter(i) worksheet.column_dimensions[column_letter].width = int(width) + 1 # +1 为避免openpyxl 的细微误差workbook.save() 堆叠的选项中,有几个开源库值得关注:
.xlsxb 格式文件。.xlsx 和 .xlsm 格式文件。.xls 格式文件。.xls 格式文件。常用的自定义格式参数:
YYYY-MM-DD, HH:MM:SS 等。通过合理搭配这些参数,可以根据需求定制 Excel 表格的外观和数据显示方式。
转载地址:http://ptsjz.baihongyu.com/