首页 > 解决方案 > 如何使用制表 python 包在终端中显示漂亮的表格?

问题描述

我有一个用 argparse 模块用 python 编写的简单 CLI 应用程序。基本上我正在使用外部 api 获取一些加密货币数据,我将其转换为 pandas 数据框并使用制表模块打印它。但是我在终端中打印表格时遇到问题。当我这样做时,一切都出错了,表格没有保持正确的结构,最后看起来就像下面的屏幕一样。

格式错误

这是使用表格打印熊猫数据框的片段

# file: example.py
import requests
from tabulate import tabulate


def get_recommendations():
    url = "https://min-api.cryptocompare.com/data/recommended/all"
    req = requests.get(url, params={'fsym' : 'BTC' ,"tsym": 'USD'})
    return pd.DataFrame(req.json()['Data']['exchanges']).T


df = get_recommendations()

print(
    tabulate(
        df,
        headers=df.columns,
        floatfmt=".5f",
        showindex=True,
        tablefmt="psql",
    )
)

如果您在终端中运行, python example.py您将看到终端中的混乱,如代码片段上方的屏幕截图所示。

我可以如何修复它,并在我的终端中显示漂亮、格式良好的表格,如下所示? 在此处输入图像描述

标签: pythondataframeterminalargparsetabulate

解决方案


我遇到了类似的问题:如何最好地在终端中打印表格?有很多不同的方法(当然,你总是可以只使用 PrettyPrinter)。我发现如果我使用 pandas DataFrame 并结合rich- dataframe模块,我可以在终端中生成一个看起来不错的表格。所以代码可能如下所示:

假设您从一个列表开始。将列表转换为字典。然后将字典传递给数据框。最后,在最后调用 print 语句。它在终端中运行良好。

编辑:在您的 MWE 中,您可能需要将 JSON 对象转换为 Python 字典。使用import json,然后json.loads(dict) 查看示例

from rich_dataframe import prettify
import pandas as pd

languages = ['English', 'Italiano', 'Espanol']

x = dict(enumerate(languages))

df = pd.DataFrame.from_dict(x, orient='index', columns=['Languages Supported'])

table = prettify(df, row_limit=10)

print(table)


推荐阅读