Python控制台循环执行时如何使用tabulate打印格式化表格
用tabulate替换pandas实现控制台表格打印
你原来的代码在循环内逐行生成DataFrame打印,会输出21个带重复表头的零散小表格,不管用pandas还是tabulate都建议先收集全量数据再一次性输出,表格观感会好很多,替换步骤如下:
- 先安装tabulate依赖,执行命令:
pip install tabulate - 移除代码里没用到的numpy、pandas导入,替换为导入tabulate的
tabulate方法 - 循环外初始化空列表存储所有行的计算结果
- 循环内完成数值计算后,把单行结果追加到数据列表中,不要在循环内执行打印
- 所有数据计算完成后,调用
tabulate()传入数据、指定表头、选择表格样式,一次性打印整表
调整后的完整代码(推荐:一次性打印全表)
from tabulate import tabulate z = 10119011 a = 17 c = 43 m = 499 # 存储所有行数据 table_data = [] # 定义表头 headers = [ 'Random Number Integer', 'Uniform Random Number', 'Penggunaan Pertamax/hari' ] for i in range(0, 21): LCG = ((a*z)+c) % m z = LCG u = z/m hasil = 700 + u * (1500-700+1) # 把当前行结果追加到数据列表 table_data.append([z, u, hasil]) # 打印表格 print(tabulate(table_data, headers=headers, tablefmt='grid', floatfmt='.6f'))
参数说明
floatfmt='.6f':指定浮点数保留6位小数,和pandas默认打印的浮点数精度对齐,可按需调整保留位数tablefmt:支持切换多种表格样式,常用可选值:simple:默认轻量样式,适合纯文本日志输出grid:全边框表格,对齐清晰,控制台观感最好psql:类PostgreSQL命令行的表格线样式plain:无任何边框的纯文本对齐格式
如果你一定要保留原来逐行打印的逻辑,也可以在循环内每次把单行数据传给tabulate打印,只是输出的会是21个独立的单行小表格,写法如下:
from tabulate import tabulate z = 10119011 a = 17 c = 43 m = 499 headers = [ 'Random Number Integer', 'Uniform Random Number', 'Penggunaan Pertamax/hari' ] for i in range(0, 21): LCG = ((a*z)+c) % m z = LCG u = z/m hasil = 700 + u * (1500-700+1) print(tabulate([[z, u, hasil]], headers=headers, tablefmt='grid', floatfmt='.6f'))
内容的提问来源于stack exchange,提问作者Reihan Wiyanda
相关产品推荐
相关产品推荐

