使用Python的Tabulate库优雅地格式化表格数据
使用Python的Tabulate库优雅地格式化表格数据
在数据分析和软件开发中,表格数据的展示是一个常见的需求。无论是简单的数据报告,还是复杂的数据可视化,表格都是一种直观且有效的信息展示方式。Python作为一门强大的编程语言,拥有丰富的库来处理和展示表格数据。其中,tabulate库就是一个非常实用的工具,它可以帮助我们轻松地将数据格式化为各种表格形式。
本文将详细介绍tabulate库的使用方法,包括安装、基本用法、高级功能以及一些实际应用案例。通过本文的学习,你将能够掌握如何使用tabulate库来优雅地展示你的表格数据。
1. 安装Tabulate库
在开始使用tabulate库之前,首先需要确保它已经安装在你的Python环境中。你可以通过以下命令使用pip来安装tabulate库:
pip install tabulate
如果你使用的是conda环境,也可以通过以下命令来安装:
conda install -c conda-forge tabulate
安装完成后,你就可以在Python脚本中导入并使用tabulate库了。
2. 基本用法
tabulate库的核心功能是将数据格式化为表格形式。它支持多种输入数据类型,包括列表、字典、NumPy数组、Pandas DataFrame等。下面我们将通过一些简单的例子来介绍tabulate库的基本用法。
2.1 格式化列表数据
假设我们有一个包含学生信息的列表,每个学生信息是一个包含姓名、年龄和成绩的子列表。我们可以使用tabulate库将这些数据格式化为表格:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, 92.3],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="grid")print(table)
输出结果如下:
+---------+-----+--------+
| Name | Age | Score |
+---------+-----+--------+
| Alice | 24 | 89.5 |
| Bob | 19 | 92.3 |
| Charlie | 22 | 85.7 |
| David | 21 | 90.1 |
+---------+-----+--------+
在这个例子中,我们使用了tabulate函数来格式化数据。headers参数指定了表格的列名,tablefmt参数指定了表格的格式。tabulate库支持多种表格格式,包括plain、simple、grid、fancy_grid、pipe、orgtbl、jira、presto、psql、rst、mediawiki、moinmoin、youtrack、html、latex、latex_raw、latex_booktabs、textile等。
2.2 格式化字典数据
除了列表,tabulate库还支持将字典数据格式化为表格。假设我们有一个包含学生信息的字典,其中键是学生的姓名,值是包含年龄和成绩的子字典。我们可以使用tabulate库将这些数据格式化为表格:
from tabulate import tabulatedata = {"Alice": {"Age": 24, "Score": 89.5},"Bob": {"Age": 19, "Score": 92.3},"Charlie": {"Age": 22, "Score": 85.7},"David": {"Age": 21, "Score": 90.1}
}headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="grid")print(table)
输出结果如下:
+---------+-----+--------+
| Name | Age | Score |
+---------+-----+--------+
| Alice | 24 | 89.5 |
| Bob | 19 | 92.3 |
| Charlie | 22 | 85.7 |
| David | 21 | 90.1 |
+---------+-----+--------+
在这个例子中,tabulate函数会自动将字典的键作为行名,并将字典的值作为表格的数据。
2.3 格式化Pandas DataFrame数据
tabulate库还支持将Pandas DataFrame数据格式化为表格。假设我们有一个包含学生信息的DataFrame,我们可以使用tabulate库将这些数据格式化为表格:
import pandas as pd
from tabulate import tabulatedata = {"Name": ["Alice", "Bob", "Charlie", "David"],"Age": [24, 19, 22, 21],"Score": [89.5, 92.3, 85.7, 90.1]
}df = pd.DataFrame(data)
table = tabulate(df, headers="keys", tablefmt="grid")print(table)
输出结果如下:
+----+---------+-----+--------+
| | Name | Age | Score |
+====+=========+=====+========+
| 0 | Alice | 24 | 89.5 |
| 1 | Bob | 19 | 92.3 |
| 2 | Charlie | 22 | 85.7 |
| 3 | David | 21 | 90.1 |
+----+---------+-----+--------+
在这个例子中,我们使用了headers="keys"参数来指定使用DataFrame的列名作为表格的列名。
3. 高级功能
除了基本的数据格式化功能,tabulate库还提供了一些高级功能,可以帮助我们更灵活地控制表格的展示方式。
3.1 自定义表格格式
tabulate库支持多种表格格式,我们可以通过tablefmt参数来指定表格的格式。例如,我们可以使用fancy_grid格式来生成一个更美观的表格:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, 92.3],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="fancy_grid")print(table)
输出结果如下:
╒═════════╤═════╤════════╕
│ Name │ Age │ Score │
╞═════════╪═════╪════════╡
│ Alice │ 24 │ 89.5 │
├─────────┼─────┼────────┤
│ Bob │ 19 │ 92.3 │
├─────────┼─────┼────────┤
│ Charlie │ 22 │ 85.7 │
├─────────┼─────┼────────┤
│ David │ 21 │ 90.1 │
╘═════════╧═════╧════════╛
3.2 自定义列对齐方式
tabulate库允许我们自定义表格中列的对齐方式。我们可以通过colalign参数来指定每一列的对齐方式。例如,我们可以将第一列左对齐,第二列居中对齐,第三列右对齐:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, 92.3],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="grid", colalign=("left", "center", "right"))print(table)
输出结果如下:
+---------+-----+--------+
| Name | Age | Score |
+---------+-----+--------+
| Alice | 24 | 89.5 |
| Bob | 19 | 92.3 |
| Charlie | 22 | 85.7 |
| David | 21 | 90.1 |
+---------+-----+--------+
3.3 自定义缺失值显示
在处理数据时,我们经常会遇到缺失值。tabulate库允许我们自定义缺失值的显示方式。我们可以通过missingval参数来指定缺失值的显示文本。例如,我们可以将缺失值显示为N/A:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, None],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="grid", missingval="N/A")print(table)
输出结果如下:
+---------+-----+--------+
| Name | Age | Score |
+---------+-----+--------+
| Alice | 24 | 89.5 |
| Bob | 19 | N/A |
| Charlie | 22 | 85.7 |
| David | 21 | 90.1 |
+---------+-----+--------+
3.4 自定义表格标题
tabulate库允许我们为表格添加标题。我们可以通过showindex参数来显示行号,并通过headers参数来指定列名。例如,我们可以为表格添加一个标题,并显示行号:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, 92.3],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="grid", showindex=True)print("Student Information")
print(table)
输出结果如下:
Student Information
+----+---------+-----+--------+
| | Name | Age | Score |
+====+=========+=====+========+
| 0 | Alice | 24 | 89.5 |
| 1 | Bob | 19 | 92.3 |
| 2 | Charlie | 22 | 85.7 |
| 3 | David | 21 | 90.1 |
+----+---------+-----+--------+
3.5 自定义表格样式
tabulate库还允许我们通过numalign和stralign参数来分别控制数字和字符串的对齐方式。例如,我们可以将数字右对齐,字符串左对齐:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, 92.3],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="grid", numalign="right", stralign="left")print(table)
输出结果如下:
+---------+-----+--------+
| Name | Age | Score |
+---------+-----+--------+
| Alice | 24 | 89.5 |
| Bob | 19 | 92.3 |
| Charlie | 22 | 85.7 |
| David | 21 | 90.1 |
+---------+-----+--------+
4. 实际应用案例
tabulate库在实际应用中有很多用途。下面我们将通过几个实际案例来展示如何使用tabulate库来处理和展示表格数据。
4.1 数据报告生成
在数据分析和报告中,表格数据的展示是非常重要的。我们可以使用tabulate库来生成各种格式的数据报告。例如,我们可以将数据分析结果格式化为HTML表格,并将其嵌入到网页中:
from tabulate import tabulatedata = [["Alice", 24, 89.5],["Bob", 19, 92.3],["Charlie", 22, 85.7],["David", 21, 90.1]
]headers = ["Name", "Age", "Score"]
table = tabulate(data, headers, tablefmt="html")print(table)
输出结果如下:
<table>
<thead>
<tr><th>Name </th><th>Age</th><th>Score</th></tr>
</thead>
<tbody>
<tr><td>Alice</td><td>24</td><td>89.5</td></tr>
<tr><td>Bob</td><td>19</td><td>92.3</td></tr>
<tr><td>Charlie</td><td>22</td><td>85.7</td></tr>
<tr><td>David</td><td>21</td><td>90.1</td></tr>
</tbody>
</table>
4.2 命令行工具开发
在开发命令行工具时,表格数据的展示是非常常见的需求。我们可以使用tabulate库来生成各种格式的表格,并将其输出到命令行中。例如,我们可以开发一个命令行工具来显示系统进程信息:
import psutil
from tabulate import tabulate# 获取系统进程信息
processes = []
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):try:processes.append([proc.info['pid'], proc.info['name'], proc.info['cpu_percent'], proc.info['memory_info'].rss])except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):pass# 格式化表格
headers = ["PID", "Name", "CPU%", "Memory"]
table = tabulate(processes, headers, tablefmt="grid")print(table)
输出结果如下:
+-------+-------------------+-------+-----------+
| PID | Name | CPU% | Memory |
+=======+===================+=======+===========+
| 1 | systemd | 0.0 | 1234567 |
| 2 | kthreadd | 0.0 | 0 |
| 3 | rcu_gp | 0.0 | 0 |
| 4 | rcu_par_gp | 0.0 | 0 |
| 5 | kworker/0:0-eve | 0.0 | 0 |
| 6 | mm_percpu_wq | 0.0 | 0 |
| 7 | ksoftirqd/0 | 0.0 | 0 |
| 8 | rcu_sched | 0.0 | 0 |
| 9 | migration/0 | 0.0 | 0 |
| 10 | watchdog/0 | 0.0 | 0 |
| 11 | cpuhp/0 | 0.0 | 0 |
| 12 | kdevtmpfs | 0.0 | 0 |
| 13 | netns | 0.0 | 0 |
| 14 | rcu_tasks_kthre | 0.0 | 0 |
| 15 | kauditd | 0.0 | 0 |
| 16 | khungtaskd | 0.0 | 0 |
| 17 | oom_reaper | 0.0 | 0 |
| 18 | writeback | 0.0 | 0 |
| 19 | kcompactd0 | 0.0 | 0 |
| 20 | ksmd | 0.0 | 0 |
| 21 | khugepaged | 0.0 | 0 |
| 22 | kintegrityd | 0.0 | 0 |
| 23 | kblockd | 0.0 | 0 |
| 24 | ata_sff | 0.0 | 0 |
| 25 | md | 0.0 | 0 |
| 26 | edac-poller | 0.0 | 0 |
| 27 | devfreq_wq | 0.0 | 0 |
| 28 | watchdogd | 0.0 | 0 |
| 29 | kswapd0 | 0.0 | 0 |
| 30 | kthrotld | 0.0 | 0 |
| 31 | acpi_thermal_pm | 0.0 | 0 |
| 32 | scsi_eh_0 | 0.0 | 0 |
| 33 | scsi_tmf_0 | 0.0 | 0 |
| 34 | scsi_eh_1 | 0.0 | 0 |
| 35 | scsi_tmf_1 | 0.0 | 0 |
| 36 | scsi_eh_2 | 0.0 | 0 |
| 37 | scsi_tmf_2 | 0.0 | 0 |
| 38 | scsi_eh_3 | 0.0 | 0 |
| 39 | scsi_tmf_3 | 0.0 | 0 |
| 40 | scsi_eh_4 | 0.0 | 0 |
| 41 | scsi_tmf_4 | 0.0 | 0 |
| 42 | scsi_eh_5 | 0.0 | 0 |
| 43 | scsi_tmf_5 | 0.0 | 0 |
| 44 | scsi_eh_6 | 0.0 | 0 |
| 45 | scsi_tmf_6 | 0.0 | 0 |
| 46 | scsi_eh_7 | 0.0 | 0 |
| 47 | scsi_tmf_7 | 0.0 | 0 |
| 48 | scsi_eh_8 | 0.0 | 0 |
| 49 | scsi_tmf_8 | 0.0 | 0 |
| 50 | scsi_eh_9 | 0.0 | 0 |
| 51 | scsi_tmf_9 | 0.0 | 0 |
| 52 | scsi_eh_10 | 0.0 | 0 |
| 53 | scsi_tmf_10 | 0.0 | 0
相关文章:
使用Python的Tabulate库优雅地格式化表格数据
使用Python的Tabulate库优雅地格式化表格数据 在数据分析和软件开发中,表格数据的展示是一个常见的需求。无论是简单的数据报告,还是复杂的数据可视化,表格都是一种直观且有效的信息展示方式。Python作为一门强大的编程语言,拥有…...
android 适配 api 35(android 15) 遇到的问题
首先升级 targetSdkVersion 和 compileSdkVersion 到 35,升级后发生的报错 一、 解决方案: 升级 gradle 和 gradle 插件版本 com.android.tools.build:gradle -> 8.3.0-alpha02 gradle-wrapper.properties : distributionUrl -> gradle-8.6-bin.zip htt…...
DeepSeek和ChatGPT的对比
最近DeepSeek大放异彩,两者之间有什么差异呢?根据了解到的信息,简单做了一个对比。 DeepSeek 和 ChatGPT 是两种不同的自然语言处理(NLP)模型架构,尽管它们都基于 Transformer 架构,但在设计目标…...
【1】高并发导出场景下,服务器性能瓶颈优化
高并发导出场景下,服务器性能瓶颈通常出现在 CPU、内存、磁盘 I/O 或网络带宽等方面。为了解决这些问题,可以从以下几个方面进行优化: 1. 优化导出逻辑 减少计算复杂度:检查导出逻辑中是否存在不必要的计算或重复操作,…...
Python Pandas(3):DataFrame
1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构,类似于一个二维的表格或数据库中的数据表。它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由…...
Mac电脑上好用的压缩软件
在Mac电脑上,有许多优秀的压缩软件可供选择,这些软件不仅支持多种压缩格式,还提供了便捷的操作体验和强大的功能。以下是几款被广泛推荐的压缩软件: BetterZip 功能特点:BetterZip 是一款功能强大的压缩和解压缩工具&a…...
BUUCTF_XSS-Lab
xss XSS(Cross - Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本(通常是 JavaScript),当其他用户访问该网站时,这些恶意脚本会在用户的浏览器中执…...
新能源算力战争:为什么AI大模型需要绿色数据中心?
新能源算力战争:为什么AI大模型需要绿色数据中心? 近年来,人工智能(AI)大模型的爆发式增长正在重塑全球科技产业的格局。以GPT-4、Gemini、Llama等为代表的千亿参数级模型,不仅需要海量数据训练,更依赖庞大的算力支撑。然而,这种算力的背后隐藏着一个日益严峻的挑战——…...
ASP.NET Core筛选器Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...
systemverilog的program和module的区别
1. 设计目的 module 硬件建模:用于描述数字电路的结构和行为(如组合逻辑、时序逻辑、连线等)。 层次化设计:支持模块化设计,可嵌套其他模块或接口(interface)。 仿真周期内持续存在࿱…...
Redis性能优化
1.是否使用复杂度过高的命令 首先,第一步,你需要去查看一下 Redis 的慢日志(slowlog)。 Redis 提供了慢日志命令的统计功能,它记录了有哪些命令在执行时耗时比较久。 查看 Redis 慢日志之前,你需要设置慢…...
go gin配置air
一、依赖下载 安装最新,且在你工作区下进行安装,我的是D:/GO是我的工作区,所有项目都在目录下的src, go install github.com/air-verse/airlatest 如果出现类似报错: 将图中第三行 github.com/air-verse/air 替换最…...
【C语言系列】深入理解指针(5)
深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…...
JVM图文入门
往期推荐 【已解决】redisCache注解失效,没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…...
uv 安装包
是的,你可以使用 uv 来安装 Python 包。uv 是一个高性能的 Python 包安装器和解析器,由 astral.sh 团队开发,旨在替代 pip 和 pip-tools,提供更快的包安装体验。 ### 如何使用 uv 安装包 1. **安装 uv**: 如果你还…...
Level2逐笔成交逐笔委托数据分享下载:20250127
Level2逐笔成交逐笔委托数据分享下载 采用Level2逐笔成交与逐笔委托的毫秒级数据,可以揭露众多有用信息,如庄家策略、伪装交易,让所有交易行为透明化。这对于交易高手的策略分析极为有用,对人工智能领域的机器学习也极为合适&…...
使用 Ollama 在腾讯云服务器环境部署 DeepSeek 大模型实战指南
文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…...
C++ 学习:深入理解 Linux 系统中的冯诺依曼架构
一、引言 冯诺依曼架构是现代计算机系统的基础,它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时,理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的,包括程序的存储、执行和资源管理。这对于编写高效、可靠…...
JS:将JS对象格式化为php语法形式(完美支持无unicode编码匹配的正则)
/*** 格式化Object数据为php语法形式* param {*} obj 任意数据* param {String} spaceLen 缩略符长度:必须在2~65536之间,否则默认为2* return {String} 格式化后的PHP语法字符串*/ function formatToPhp(obj, spaceLen) {formatToPhp function (obj, s…...
网络安全 | 零信任架构:重构安全防线的未来趋势
网络安全 | 零信任架构:重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…...
告别手动操作!用Ansible user模块高效管理 Linux账户
在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,…...
将Windows下的USB设备共享给WSL(ubuntu)
前言 本文用于学习记录,文中提到的方法也来自于网上资料,如有不对请指出,谢谢! 微软官方参考链接:https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb 如果没有特殊标注,以下命令均在Windows终…...
lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1)
1.遇到问题: lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1) 当我部署到nginx上之后,第一次测试 没有啥问题当我点击登录之后,然后测试一个删除按钮之后就爆这个错误。 2.原因分析: 我遇到的是缓…...
Vue el-input密码输入框 按住显示密码,松开显示*;阻止浏览器密码回填,自写密码输入框;校验输入非汉字内容;文本框聚焦到内容末尾;
输入框功能集合 <template><div style"padding: 10px"><!-- 密码输入框 --><el-input:type"inputType"v-model"password"placeholder"请输入密码"auto-complete"new-password"id"pwd"style…...
Three.js实现炫酷图片粒子化效果:从聚合到扩散的动态演变
一、效果展示 本特效实现了一个基于图片像素的智能粒子系统,通过Three.js引擎驱动,呈现出以下惊艳效果: 图片粒子化:将任意图片转化为动态粒子系统智能聚合扩散:粒子在聚合状态与随机扩散状态间自然过渡物理运动模拟…...
MySQL中like模糊查询如何优化?
大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中,LIKE模糊查询通常会影…...
为什么使用nohup 和 启动的python脚本,进程还在,但是不处理数据
使用 nohup 和 & 启动 Python 脚本后,进程仍然在运行但不处理数据,可能有几个原因: 1. 脚本内部问题(例如死循环、阻塞) Python 脚本内部可能存在阻塞操作或死循环,导致进程不执行预期的任务。你可以…...
Android 约束布局ConstraintLayout整体链式打包居中显示
Android 用约束布局ConstraintLayout实现将多个控件视作一个整体居中显示,使用 app:layout_constraintHorizontal_chainStyle"packed"实现 chain 除了链条方向有横向和竖向区分外, chain链条上的模式有 3种 spread - 元素将被展开&#…...
在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。
在 MySQL 8 中配置主从同步(主从复制)是一个常见的需求,用于实现数据的冗余备份、读写分离等。以下是详细的配置步骤: 一、环境准备 假设你有两台 MySQL 服务器: 主服务器(Master):IP 地址为 192.168.1.100,端口为 3306从服务器(Slave):IP 地址为 192.168.1.101,…...
4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)
文章目录 前言一、Ajax技术(从服务端获取数据,发送各种请求)0 接口文档管理:使用apipost等接口测试软件创建接口便于前端后端分离测试1 基本概念2 原生Ajax使用示例(几年前的早期用法) 二、 Axios技术(对原…...
