如何在Python中漂亮地打印表格


如何在Python中漂亮地打印表格

你想在Python中使你的表格数据看起来漂亮吗?有一些有用的库可以完成这项工作。

在这篇文章中,我们将向你展示一些有用的库,以便在Python中快速、轻松地打印和格式化一个表格,而且是以一种视觉上吸引人的方式--也就是漂亮的打印。几乎不费吹灰之力,你的表格就可以用于在线出版、分析报告或科学论文。

Python已经成为数据分析的首选语言之一。它功能强大而灵活。其清晰易懂的语法使其成为一种很好的学习语言,即使是初学者。大量的开源库提供了从搜刮、清理和操作数据到可视化和机器学习的所有功能。

本文针对的是更有经验的程序员和数据分析师。如果你是一个初学者,这里有一个很好的课程,可以让你站起来。

让我们先看看一些快速和肮脏的方法,在Python中打印表格,以便在你匆忙的时候使用。

不那么漂亮的打印

在探索性数据分析阶段,你不用太担心美学问题是对的。浪费你的时间来制作漂亮的图表和表格是没有意义的。

有一些快速的技术可以在 Python 中打印一个表格。第一个是用 format() 方法进行字符串格式化。假设你有一些存储在列表中的表格数据。这可以快速地逐行打印,如下所示:

table = [[1, 2222, 30, 500], [4, 55, 6777, 1]]

for row in table:

 print('| {:1}| {:^4}) | {:^4} | {:>4} | {:<3} |'.format(*row))

这种方法实现起来很快,也很容易理解,但有一些缺点。最明显的一点是,你必须知道并定义每一列的宽度,由print()函数中的整数给出。你可以通过编写一些代码来找到每一列中数字的最大长度来克服这个问题,但这开始增加了本应是一项快速工作的复杂性。

注意第二、第三和第四列分别是居中、右对齐和左对齐的。这是由^、>和<字符控制的。

另一个选择是 pandas 库,它已经成为 Python 中数据分析的支柱。如果你觉得你需要提高你的 pandas 游戏水平,这里有一篇关于处理数据框架的文章。将一个表转换为一个数据框架并打印其内容是很简单的:

import pandas as pd

table = [[1, 2222, 30, 500], [4, 55, 6777, 1]]

df = pd. DataFrame(table, columns = ['a', 'b', 'c', 'd'], index=['row_1', 'row_2'])

print(df)

这比第一个方法更简单,因为你不需要定义列宽或格式。

我们可以自定义打印的数据框的外观,但这是很麻烦的。你可以使用pd.set_option()来配置诸如对齐方式和列宽的东西,但这很快就会给你的程序增加很多行。可以显示的行数也受到一个默认的固定数字的限制,所以你必须将 display.max_rows 选项设置为 df.shape[0]+1 才能看到所有的行。

漂亮的打印

当你完成探索性数据分析阶段时,你可能想使你的表格看起来更漂亮。有两个库提供了在 Python 中漂亮打印逗号分隔值 (CSV) 的功能:tabulate 和 prettytable。

说到 CSV 数据,如果你想学习如何读写这种数据格式,请查看这篇文章。我们也有一些关于如何在 Python 中读写 Excel 文件的材料,这也是很有用的。

tabulate

tabulate 库提供了对一些不同数据类型的支持,包括列表的列表、NumPy 数组和 pandas 数据框,等等。一旦安装完毕,你只需调用该库并将你的数据传递给tabulate函数,如下所示:

from tabulate import tabulate

table = [[1, 2222, 30, 500], [4, 55, 6777, 1]]

print(tabulate(table))

这还不是特别漂亮,但要从这里获得更有视觉吸引力的东西,只需定义一些可选的参数。如果你的表有一个标题,你可以用 headers 关键字来定义,你可以定义 tablefmt 关键字来改变外观。

有许多选项可供选择。对于那些你碰巧感觉有点花哨的时刻,你可以试试下面的方法:

table = [['col 1', 'col 2', 'col 3', 'col 4'], [1, 2222, 30, 500], [4, 55, 6777, 1]]

print(tabulate(table, headers='firstrow', tablefmt='fancy_grid'))

这个库的一个不错的特点是有大量的预定义格式来帮助以各种方式发布表。例如,mediawiki格式提供了维基百科中使用的表格标记,如果你打算编写或编辑维基百科页面,这很方便。对于分析报告或科学出版物,有各种latex格式,也支持在流行的项目管理软件Jira或GitHub上发布表格。下面是一个例子,展示了如何使用一行Python来准备使用html格式在线发布的表格数据:

>>> print(tabulate(table, headers='firstrow', tablefmt='html'))

col 1col 2col 3col 4
1222230500
45567771

prettytable


prettytable库提供一个具有一些独特功能的替代解决方案。我们将使用 prettyTable() 类来定义、修改和打印 Python 中的表格。

下面是如何用标题信息定义一个表对象,然后使用 add_rows() 方法一次添加多行:

from prettytable import PrettyTable

table = [['col 1', 'col 2', 'col 3', 'col 4'], [1, 2222, 30, 500], [4, 55, 6777, 1]]

tab = PrettyTable(table[0]) tab. add_rows(table[1:])

从这里开始,你可以简单地打印()表格,使其以ASCII形式可视化,或者你可以使用许多可用的方法来修改和格式化表格数据。要添加单行,有add_row()方法;要添加一列,使用add_column()方法。后者有两个必要的参数:一个字符串来定义fieldname,一个列表或元组作为列。你也可以定义水平和垂直对齐,如下例所示:

tab.add_column('col 5', [-123, 43], align='r', valign='t')

print(tab)

在很多情况下,你的表格数据保存在CSV文件或者数据库中。prettytable 库带有从外部源读取数据的功能,例如 CSV,如下所示:

f from prettytable import from_csv

with open('data_file.csv') as table_file:

tab = from_csv(table_file)

对于具有符合 Python DB-API 的 Python 库的数据库 - 例如 SQLite 数据库 - 你可以定义一个游标对象然后使用 prettytable 的 from_db_cursor() 函数建立一个表。要做到这一点,你只需要大约 4 行 Python 代码。

这个库的一个优点是能够修改表格数据。另一个是额外的功能,让你可以控制从表中显示什么数据。使用带有 fields 参数的 get_string() 方法,你可以控制哪些列被显示。同样地,start和end参数允许你定义你想显示的行的索引。该方法还包含 sortby 关键字,它允许你按照特定的列对你的表格数据进行排序。

与 tabulate 库一样,prettytable 库也带有预定义的格式,以帮助以不同方式发布表格。例如,你可以以Microsoft-Word友好的风格发布,还有JSON和HTML格式的自定义选项。如果你有兴趣学习如何处理不同文件格式的数据,包括CSV和JSON,请看这个课程。

如果你想对显示表格数据进行更精细的控制,你也可以手动指定属性。让我们看看在 Python 中配置表格数据的一个更复杂的例子:

from prettytable import ALL, FRAME

tab = PrettyTable(table[0])

tab.add_rows(table[1:])

tab.hrules = ALLtab.vrules = FRAME

tab. int_format = '8'

tab.padding_width = 2

tab.junction_char = '.'tab.sortby = 'col 2'

print(tab)

Closing Thoughts on Pretty Printing Tabular Data in Python

我们已经探索了在Python中显示表格数据的各种方法。无论你是在寻找一种快速和肮脏的表示方法来帮助理解你的数据,还是准备在网上或科学杂志上发表你的表格,这里讨论的方法都为你提供了开始使用的工具。我们鼓励你尝试使用这些代码片段,并开始用Python为你的表格数据建立一个漂亮的可视化。

如果你正在寻找更多关于使用Python进行数据科学的材料,请查看这个课程。它包括有用的课程和练习,让你在成为一个更好的数据科学家的道路上前进。编码愉快!



本文标签

热门标签

会员评论