我有一个用 python 编写的简单 CLI 应用程序,带有 argparse 模块。基本上,我使用外部 api 获取一些加密货币数据,将其转换为 pandas 数据帧并使用 tabulate 模块打印。但我在终端中打印表格时遇到问题。当我这样做时,一切都会出错,表格无法保持正确的结构,最终一切都像下面的屏幕一样。
这是使用 tabulate 打印 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
您会在终端中看到混乱,如上面代码片段的屏幕截图所示。
我遇到了类似的问题:如何最好地在终端中打印表格?有很多不同的方法(当然,您始终可以只使用 PrettyPrinter)。我发现如果我使用 pandas DataFrame 并结合 rich-dataframe 模块,我可以在终端中生成一个看起来不错的表格。 所以代码可能如下所示:
假设您从一个列表开始。将列表转换为字典。然后将字典传递给数据框。最后调用最后的打印语句。它在终端中运行良好。
编辑:在 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)
Pandas 有
DataFrame.to_markdown()
方法,它使用 tabulate 生成可以打印到控制台的漂亮表格。您可以传递 tablefmt=
参数来根据表格文档获取不同样式的表格。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_markdown.html