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

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

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

一、准备数据

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

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_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 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引擎

方法一:直接写入数据

使用 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')

六、自适应列宽保存

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

使用xlsxwriter
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()
使用openpyxl
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()

七、相关工具库

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

  • 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复习
查看>>
NFS网络文件系统
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
ng 指令的自定义、使用
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx Location配置总结
查看>>
Nginx Lua install
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>