Pandas导出美化技巧,让你的Excel更出众
pandas的DataFrame可以通过设置参数使得在jupyter notebook中显示的更加美观,
但是,将DataFrame的数据导出excel时,却只能以默认最朴素的方式将数据写入excel。
本文介绍一种简单易用,让导出的excel更加美观的方法。
1. 概要
首先,引入一个库StyleFrame,这个库封装 pandas和openpyxl,让我们轻松的设置DataFrame的样式并导出到excel中。
安装很简单:
pip install styleframe
这个库主要包含3个模块:
styleframe:相当于这个库的主入口,它封装了DataFrame对象。styler:用来单元格的样式。utils:常用样式元素的辅助类,比如数字和日期格式、颜色和边框类型等。
安装成功之后,下面通过示例看看如何使用。
2. 准备数据
下面示例中使用的数据采集自链家网的真实成交数据。
数据下载地址:https://databook.top/。
导入数据:
import pandas as pd
fp = "D:/data/南京二手房交易/南京建邺区.csv"
df = pd.read_csv(fp)
# 为了简化,只取10条数据来演示导出效果
df = df.head(10)

3. 行列设置
先看看默认导出excel的效果。
output = "d:\data\output.xlsx"
df.to_excel(output, index=None)

默认导出的样式就是这样,所有单元格都一样,不管单元格的内容是什么。
3.1. 设置自适应
第一步,我们设置内容自适应(shrink_to_fit),确保每个单元格中的内容能够完整显示。
from styleframe import StyleFrame, Styler, utils
style = Styler(shrink_to_fit=True)
sf = StyleFrame(df, styler_obj=style)
writer = sf.to_excel(output)
writer.close()

可以看出,StyleFrame的默认导出样式,给有数据的表格加了边框。
使用shrink_to_fit=True样式之后,每个单元格的内容可以完整显示了。
3.2. 设置列宽
从上面的效果,我们发现,所有列的宽度是一样的,无论列中的内容有多长。
我们可以设置某些文字内容比较多列更宽一些。
sf.set_column_width_dict(
{
"name": 25,
"positionInfo": 20,
"advantage": 15,
"dealCycleDays": 16,
}
)

调整之后,内容看起来更清晰了。
3.3. 设置表头,内容
接下来,我们通过字号,对齐方式,背景色以及是否加粗来区分表头和内容部分。
header_style = Styler(
bg_color="yellow",
bold=True,
font_size=12,
horizontal_alignment=utils.horizontal_alignments.center,
vertical_alignment=utils.vertical_alignments.center,
)
content_style = Styler(
shrink_to_fit=True,
font_size=8,
horizontal_alignment=utils.horizontal_alignments.left,
)
sf.apply_column_style(sf.columns, content_style)
sf.apply_headers_style(header_style)

内容更加紧凑了,表头部分也更突出了。
3.4. 设置行间隔颜色
最后,我们在优化下内容显示部分,用不同的背景色区分奇数行和偶数行。
row_style = Styler(
bg_color="#32CD32",
shrink_to_fit=True,
font_size=8,
horizontal_alignment=utils.horizontal_alignments.left,
)
# 计算要设置背景色的行索引
indexes = list(range(1, len(sf), 2))
sf.apply_style_by_indexes(indexes, styler_obj=row_style)

4. 样式设置
样式设置主要是Styler这个模块提供的功能。
通过Styler类提供的接口,我们可以设置灵活的控制导出的样式。
4.1. 字体
我们给第一行设置不同的字体(font="STKaiti"),看看导出的效果:
first_line_style = Styler(
shrink_to_fit=True,
font="STKaiti",
font_size=14,
horizontal_alignment=utils.horizontal_alignments.left,
)
sf.apply_style_by_indexes(indexes_to_style=[0], styler_obj=first_line_style)

第一行的字体是华文楷体,和其他行不一样。
4.2. 颜色
再把第一行的字调成蓝色(font_color="blue")。
first_line_style = Styler(
shrink_to_fit=True,
font="STKaiti",
font_size=14,
font_color="blue",
horizontal_alignment=utils.horizontal_alignments.left,
)
sf.apply_style_by_indexes(indexes_to_style=[0], styler_obj=first_line_style)

4.3. 背景色
再给第一行加一个红色背景(bg_color="red")。
first_line_style = Styler(
shrink_to_fit=True,
font="STKaiti",
font_size=14,
font_color="blue",
bg_color="red",
horizontal_alignment=utils.horizontal_alignments.left,
)
sf.apply_style_by_indexes(indexes_to_style=[0], styler_obj=first_line_style)

4.4. 边框
边框是区隔,突出内容的一种手段,比如,我们可以在表头部分用实线粗边框(border_type=utils.borders.thick),内容部分用虚线细边框(border_type=utils.borders.dashed)。
header_style = Styler(
bg_color="yellow",
bold=True,
font_size=14,
border_type=utils.borders.thick,
)
content_style = Styler(
shrink_to_fit=True,
font_size=12,
border_type=utils.borders.dashed,
)
sf.apply_column_style(sf.columns, content_style)
sf.apply_headers_style(header_style)

4.5. 数字和日期
最后,看看如何定制数字(number_format)和日期(date_format)的显示方式。
我们把上面示例中的总价(totalPrice)保留两位小数,日期(DealDate)改为只显示月和日。
num_style = Styler(
shrink_to_fit=True,
font_size=12,
number_format=utils.number_formats.general_float,
border_type=utils.borders.dashed,
horizontal_alignment=utils.horizontal_alignments.left,
)
sf.apply_column_style(["totalPrice", "unitPrice"], num_style)
date_style = Styler(
shrink_to_fit=True,
font_size=12,
date_format="DD/MM",
border_type=utils.borders.dashed,
horizontal_alignment=utils.horizontal_alignments.left,
)
sf.apply_column_style("dealDate", date_style)

5. 总结
导出分析结果是我们做数据分析的最后一步,也是最容易被忽视的一步。
我们常常把大部分的精力都会花在数据的整理和分析上,最后给客户提供一个简易的报告和数据。
殊不知,导出一个美观清晰的分析结果和数据,反而更能得到客户的肯定和信任,因为这才是客户能够切身感知到的部分,否则花在数据整理和分析的精力再多,也不能让客户有直接的感受。
Pandas导出美化技巧,让你的Excel更出众的更多相关文章
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...
- 导出CSV格式文件,用Excel打开乱码的解决办法
导出CSV格式文件,用Excel打开乱码的解决办法 1.治标不治本的办法 将导出CSV数据文件用记事本打开,然后另存为"ANSI"编码格式,再用Excel打开,乱码解决. 但是,这 ...
- C# 导出dataGridView中的值到Excel
C# 怎么导出dataGridView中的值到Excel 1 2 3 4 5 6 在系统应用过程中,数据是系统的核心.如果直接在应用软件中看数据,有时也有些不便,所以就会把系统数据转换成Excel格式 ...
- 微信公众号开发之如何一键导出微信所有用户信息到Excel
微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 极速开发微信公众号系列文章之如何一键导出微信所有用户信息到E ...
- Cadence技巧01:利用Excel速新建原理图元件库
Cadence技巧01:利用Excel速新建原理图元件库 听语音 | 浏览:1698 | 更新:2015-07-02 09:41 | 标签:excel 1 2 3 4 5 6 7 分步阅读 一键约师傅 ...
- 导出网页中的table到excel
导出网页中的table到excel的两种简便方法: 1. 纯 JavaScript 方法,缺点只支持IE浏览器 var elTable = document.getElementById(" ...
- Excel实用技巧-如何批量提取excel工作表名称
Excel实用技巧-如何批量提取excel工作表名称 1. 打开Excel文件,点击“公式”栏,进而点击“定义管理器” 2. 在弹出的对话框中,点击新增按钮, 名称:“sheet”,引用位置:“=RE ...
- Pandas使用实用技巧
Pandas实用使用技巧 1 列拆分成行 常见的需求是将某一列根据指定的分隔符拆分成多列.现有需求,根据指定的分隔符将其拆分为多行. 例: df = A B 0 a f 1 b;c h;g 2 d k ...
- vscode配置指南,美化技巧
vscode配置指南,美化技巧 vscode****选中部分高亮 "workbench.colorCustomizations": { "editor.selection ...
随机推荐
- Flask 框架实现自定义分页
手撸的表格分页: Flask框架下的分页,我研究了很久,自带的分页方法不稳定,还不如自己手撸的好使. <!--name:ndex.html--> <!DOCTYPE html> ...
- npm查看插件所有版本命令
npm view webpack versions npm view webpack versions
- Linux虚拟机追加扩展磁盘
一.使用VMware给虚拟机追加磁盘 使用VMware打开虚拟机设置对话框,选择硬盘,点击右侧的扩展按钮,输入扩展后的磁盘容量. 点击扩展按钮.提示磁盘已成功扩展. 二.对闲置的空间进行分区 上面扩展 ...
- 尴尬:在zoom中找不到会议密码
临时要开一个zoom会议,点击"新会议"进入,然后邀请其他与会者. "会议" - "复制邀请链接", 得到一行这样的信息(会议号已模糊处理) ...
- SecureCRT使用sftp上传较大文件意外暂停
今天在一台跳转机使用SecureCRT的sftp上传较大文件时,发现中途会时常停止传输,给出提示如下: 如果此时选择Accept Once,会继续传输,但是过一段时间后,还是会停止并给出相同提示,如果 ...
- 《ASP.NET Core 微服务实战》-- 读书笔记(第11章)
第 11 章 开发实时应用和服务 在本章,我们将讨论"实时"的准确含义,以及在大部分消费者看来应该属于这一范畴的应用类型 接着,我们将探讨 WebSocket,并分析为什么传统的 ...
- 在.NET Core下的机器学习--学习笔记
摘要 .NET Core 在机器学习的应用场景,除了 ML .NET 还会介绍一个非常棒的開源技術 TensorFlow .NET , Keras .NET. 讲师介绍 本课内容 人工智能介绍 ML ...
- [SpringBoot][Maven]关于maven pom文件的packaging属性
关于maven pom文件的packaging属性 前几天在调试源码运行程序的时候,因为将项目中pom文件的packaging属性用错导致源码包无法引入使用而报Bean注入错误,在此进行总结整理记录. ...
- 回顾复习之坐标DP
定义 坐标型动态规划一般是给定网格.序列,求满足条件的MAX或MIN. 开数组时,dp[i]一般代表以ai结尾的满足条件的子序列,dp[i][j]代表以i.j结尾的满足条件的最优解 例题 数塔 典中典 ...
- Laravel入坑指南(2)——路由、控制器
接上一节,我们已经把Laravel有Hello World项目跑起来了. 现在各位小友最着急的,应该是想了解,我们怎么在"页面"echo一个自己的Hello World字符串. & ...