使用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 tabulate

data = [
    ["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库支持多种表格格式,包括plainsimplegridfancy_gridpipeorgtbljiraprestopsqlrstmediawikimoinmoinyoutrackhtmllatexlatex_rawlatex_booktabstextile等。

2.2 格式化字典数据

除了列表,tabulate库还支持将字典数据格式化为表格。假设我们有一个包含学生信息的字典,其中键是学生的姓名,值是包含年龄和成绩的子字典。我们可以使用tabulate库将这些数据格式化为表格:

from tabulate import tabulate

data = {
    "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 tabulate

data = {
    "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 tabulate

data = [
    ["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 tabulate

data = [
    ["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 tabulate

data = [
    ["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 tabulate

data = [
    ["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库还允许我们通过numalignstralign参数来分别控制数字和字符串的对齐方式。例如,我们可以将数字右对齐,字符串左对齐:

from tabulate import tabulate

data = [
    ["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 tabulate

data = [
    ["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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965809.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA】 MIPS 12条整数指令 【3】

实现乘除 修改框架 EX&#xff1a;实现带符号乘除法和无符号乘除法 HiLo寄存器&#xff1a;用于存放乘法和除法的运算结果。Hi、Lo为32bit寄存器。电路描述与实现RegFile思想一致 仿真 代码 DataMem.v include "define.v"; module DataMem(input wire clk,input…

电路笔记(电源模块): 直流双路输出电源输出正负5伏电压

实现方法 以E3620A直流电源为例&#xff0c;调节两个电源的电压&#xff0c;并正负短接&#xff1a; 原理 图片来源&#xff1a;https://2.eewimg.cn/mp/uploads/2022/09/13/f6f96c1c-333c-11ed-b203-00163e2e672a.jpg CG 【产品】50W最大工作功率&#xff0c;1A/25V高精度…

深入浅出:机器学习的全面解析

深入浅出&#xff1a;机器学习的全面解析 引言 机器学习&#xff08;Machine Learning, ML&#xff09;作为人工智能的一个重要分支&#xff0c;近年来取得了显著进展&#xff0c;并在多个领域中得到了广泛应用。本文将从基础概念、核心算法、应用场景以及未来发展趋势等方面…

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…

Mysql知识梳理(数据库的锁梳理,Mysql优化)

Mysql知识梳理 Mysql构成存储引擎 Mysql隐藏知识mysql中的日志Redo LogRedo Log 的特性&#xff1a;Redo Log 与 Binlog 的区别&#xff1a; undo 的工作Undo Log 的工作原理&#xff1a;Undo Log 的特性&#xff1a;Undo Log 的作用&#xff1a; Undo Log 与 Redo Log 的区别&…

地平线 3D 目标检测 Bevformer 参考算法-V2.0

该示例为参考算法&#xff0c;仅作为在 征程 6 上模型部署的设计参考&#xff0c;非量产算法 简介 BEVFormer 是当前热门的自动驾驶系统中的 3D 视觉感知任务模型。BEVFormer 是一个端到端的框架&#xff0c;BEVFormer 可以直接从原始图像数据生成 BEV 特征&#xff0c;无需依…

Deepseek 【大模型】之 Ollama 与 Ollama Web UI Lite 本地部署 Deepseek 可视化UI 访问模型的简单整理

Deepseek 【大模型】之 Ollama 与 Ollama Web UI Lite 本地部署 Deepseek 可视化UI 访问模型的简单整理 目录 Deepseek 【大模型】之 Ollama 与 Ollama Web UI Lite 本地部署 Deepseek 可视化UI 访问模型部署简单整理 一、简单介绍 二、 Ollama 下载安装 三、Ollama 下载 LLM…

Excel 融合 deepseek

效果展示 代码实现 Function QhBaiDuYunAIReq(question, _Optional Authorization "your api key", _Optional Qhurl "https://qianfan.baidubce.com/v2/chat/completions")Dim XMLHTTP As ObjectDim url As Stringurl Qhurl 这里替换为你实际的URLDim …

SpringBoot开发(六)SpringBoot整合MyBatis

1. SpringBoot整合MyBatis 1.1. MyBatis介绍 MyBatis 是一款优秀的持久层Dao框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c…

[数据结构] Set的使用与注意事项

目录 Set的说明 常见方法说明 注意事项 TreeSet使用案例 Set的说明 Set与Map主要的不同有两点: Set是继承自Collection的接口类,Set中只存储了Key. 常见方法说明 方法解释boolean add(E e)添加元素,但重复元素不会被添加成功void clear()清空集合boolean contains(Object…

JumpServer堡垒机管理服务器与数据库资产

第一次接触JumpServer是一位老师借给我的&#xff0c;当时想部署oceanbase 企业版V3 &#xff0c;苦于笔记本内存太小&#xff0c;后来在JumpServer上部署成功了&#xff0c;后来一直对JumpServer比较感兴趣&#xff0c;年后有时间对JumpServer进行了系统的学习 一.使用场景 我…

汽车免拆诊断案例 | 2015款奔驰R320车行驶中偶尔多个故障灯异常点亮

故障现象  一辆2015款奔驰R320车&#xff0c;搭载276 826 发动机&#xff0c;累计行驶里程约为18万km。该车行驶中&#xff0c;组合仪表上的ABS警告灯、防侧滑警告灯、发动机故障灯等多个故障灯偶尔异常点亮&#xff08;图1&#xff09;&#xff0c;且车速表不指示&#xff0…

实验3 词法分析(二)

实验3 词法分析(二) [实验目的]&#xff1a; 1 . 熟悉给定的词法分析程序&#xff1b; 2 . 改进词法分析程序。 [实验内容]&#xff1a; 1.尝试多方面改进TEST语言的文法&#xff0c;参考教材附录B词法分析程序TESTscan.c&#xff0c;在此词法分析程序的基础上改进程序&#x…

[创业之路-286]:《产品开发管理-方法.流程.工具 》-2- 人的管理是任何组织首要解决的问题 - 企业与研发组织组成、构架、组织分工

目录 一、产品开发的部门组成&#xff08;系统关键组成要素&#xff09; 1、产品开发中的市场规划部门与研发内部的市场/产品/技术预研部门的职责区别&#xff1a; 2、研发的分类&#xff1a;技术预研、平台开发、产品开发 相同点 差异点 相互联系 二、研发的组织架构 1…

使用jmeter进行压力测试

使用jmeter进行压力测试 jmeter安装 官网安装包下载&#xff0c;选择二进制文件&#xff0c;解压。 tar -xzvf apache-jmeter-x.tgz依赖jdk安装。 yum install java-1.8.0-openjdk环境变量配置&#xff0c;修改/etc/profile文件&#xff0c;添加以下内容。 export JMETER/…

matlab simulink LNG广义预测控制

1、内容简介 略 matlab simulink 120-LNG广义预测控制 可以交流、咨询、答疑 2、内容说明 略 模型分为2部分&#xff0c;一部分是simulink的结果&#xff0c;用的是pid和模糊pid控制&#xff0c;第二个模型考虑到代码计算的方便性&#xff0c;采用的m文件做仿真&#xff0…

git submodule使用

git submodule 用于关联其他独立的仓库。 它有着几点好处&#xff1a; 代码复用&#xff1a;可以将工具代码放到单独的仓库&#xff0c;再通过 submodule 关联。模块化开发&#xff1a;可以将项目拆分成多个模块&#xff0c;每个模块设置单独仓库独立开发&#xff0c;再通过 su…

python怎么求 一个数是否包含3

python求一个数包含3的方法&#xff1a; 1、使用“for i in 列表名”循环遍历列表中的每一个元素并将每个元素用str()函数转换成字符串格式 2、用“if str(3) in i”判断该元素中是否含有3 完整代码如下&#xff1a; 执行结果如下&#xff1a;

数据库系统概念第六版记录 三

外码约束&#xff08;Foreign Key Constraint&#xff09; 外码&#xff08;Foreign Key, FK&#xff09;是关系数据库中的一个约束&#xff0c;它用于保证表之间的引用完整性。外码的值必须&#xff1a; 要么存在于被引用表的主键列中&#xff0c;要么为空&#xff08;NULL&…

修改SSH登录密码,只需要登录SSH,之后输入命令即可,这里登录使用的软件为 MobaXterm1

在登入终端之后输入命令 passwd {用户名} 即可进行修改。需要注意的是&#xff0c;输入的密码不会有星号代替&#xff0c;也不会出现明文。 如果想要修改SSH的登录端口&#xff0c;比如修改为1433&#xff0c;则只需要执行以下命令即可&#xff1a; /usr/sbin/sshd -p 1433…