博客
关于我
Pandas指定样式保存excel数据的N种姿势
阅读量:504 次
发布时间:2019-03-07

本文共 4325 字,大约阅读时间需要 14 分钟。

Pandas指定样式保存Excel数据的N种姿势

一、准备数据

以下是用于演示的数据集:

from datetime import datetime, date
import pandas as pd
data = {
'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_formatdatetime_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样式

如果需要对指定列的数据设置文字颜色或背景色,可以使用 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引擎

如果需要对数值数据进行格式化,可以使用 xlsxwriter 的一些高级功能:

import xlsxwriter
from openpyxl import Workbook
workbook = 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 = 9
workbook.save()

五、使用openpyxl引擎

方法一:直接写入数据

使用 openpyxl 作为引擎,推荐用于更复杂格式的保存:

from openpyxl import Workbook
import pandas as pd
writer = 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 = width
writer.save()
方法二:加载模板并写入数据

如果需要基于模板文件写入数据,可以直接使用 openpyxl 的 API:

from openpyxl import load_workbook
import 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')

六、自适应列宽保存

为了让列自动调整合适的宽度,可以使用以下方法:

使用xlsxwriter
from openpyxl import Calculate
import pandas as pd
column_widths = df.columns.to_series().str.len().values
max_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()
使用openpyxl
from openpyxl import Workbook, get_column_letter
import pandas as pd
column_widths = df.columns.to_series().str.len().values
max_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.active
for 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()

七、相关工具库

堆叠的选项中,有几个开源库值得关注:

  • openpyxl:功能强大,支持复杂格式和条件格式,但操作相对繁琐。
  • xlsxwriter:功能接近 openpyxl,但在样式调整上更为直观。
  • pyxlsb:专注于读取 .xlsxb 格式文件。
  • pylightxl:支持 .xlsx.xlsm 格式文件。
  • xlrd:专注于读取 .xls 格式文件。
  • xlwt:专注于写入 .xls 格式文件。
  • xlutils:辅助工具库,用于配合其他库使用。

八、Excel自定义格式参数

常用的自定义格式参数:

  • 通用格式:G inferred formatting。
  • 字符颜色:[green], [blue], [red] 等。
  • 条件格式:可以基于单元格内容的值进行格式化。
  • 日期和时间:如 YYYY-MM-DD, HH:MM:SS 等。

通过合理搭配这些参数,可以根据需求定制 Excel 表格的外观和数据显示方式。

转载地址:http://ptsjz.baihongyu.com/

你可能感兴趣的文章
NFS网络文件系统
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
NFV商用可行新华三vBRAS方案实践验证
查看>>
ng build --aot --prod生成文件报错
查看>>
ng 指令的自定义、使用
查看>>
nghttp3使用指南
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
查看>>
nginx 1.24.0 安装nginx最新稳定版
查看>>
nginx 301 永久重定向
查看>>
nginx css,js合并插件,淘宝nginx合并js,css插件
查看>>
Nginx gateway集群和动态网关
查看>>
Nginx Location配置总结
查看>>
Nginx log文件写入失败?log文件权限设置问题
查看>>