Python - 干净地打印类似 table 的数据
Python - print table-like data cleanly
我的输出看起来像这样
AB%CD3_SW3Z_1000 uvsec_czrkup_rmplr SeightRveZargrp def_move 35.8% 28.0% 16.2% 120 0.0010
MN%P03_AT%W00_500 uvsec_czrkup_rmplr SeightRveZargrp def_move 28.8% 24.7% 23.4% 94 0.1000
KE_A03_UVA%Q00_100 uvsec_czrkup_rmplr SeightRveZargrp def_move 27.2% 11.8% 3.5% 398 0.010
将其格式化为最干净、最优雅的方法是什么
AB%CD3_SW3Z_1000 uvsec_czrkup_rmplr SeightRveZargrp def_move 35.8% 28.0% 16.2% 120 0.0010
MN%P03_AT%W00_500 uvsec_czrkup_rmplr SeightRveZargrp def_move 28.8% 24.7% 23.4% 94 0.1000
KE_A03_UVA%Q00_100 uvsec_czrkup_rmplr SeightRveZargrp def_move 27.2% 11.8% 3.5% 398 0.010
当然,我问的是一般情况,假设每一行都有相同数量的标记。我希望列左对齐。
您可以这样做的一种方法是使用 str.ljust(width)
(假设您已将所有内容都转换为字符串)填充每行中的每个标记,使列中的每个标记具有相同的宽度。要确定您要使用的宽度,请设置固定宽度(如果您知道标记的最大可能长度)或者通过获取每列中的最大条目来为每列设置固定宽度。
我过去曾将 PrettyTables 用于此类应用程序和此功能:
def format_df(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
完整示例,使用您的输入如下所示:
import pandas as pd
from prettytable import PrettyTable
def format_df(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
df = pd.read_clipboard(header=None) # No header provided on example input
print(format_df(df))
这会生成以下输出。 headers 命名不当,因为您的示例数据中没有提供 headers:
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+
| 0 | AB%CD3_SW3Z_1000 | uvsec_czrkup_rmplr | SeightRveZargrp | def_move | 35.8% | 28.0% | 16.2% | 120 | 0.001 |
| 1 | MN%P03_AT%W00_500 | uvsec_czrkup_rmplr | SeightRveZargrp | def_move | 28.8% | 24.7% | 23.4% | 94 | 0.1 |
| 2 | KE_A03_UVA%Q00_100 | uvsec_czrkup_rmplr | SeightRveZargrp | def_move | 27.2% | 11.8% | 3.5% | 398 | 0.01 |
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+
我的输出看起来像这样
AB%CD3_SW3Z_1000 uvsec_czrkup_rmplr SeightRveZargrp def_move 35.8% 28.0% 16.2% 120 0.0010
MN%P03_AT%W00_500 uvsec_czrkup_rmplr SeightRveZargrp def_move 28.8% 24.7% 23.4% 94 0.1000
KE_A03_UVA%Q00_100 uvsec_czrkup_rmplr SeightRveZargrp def_move 27.2% 11.8% 3.5% 398 0.010
将其格式化为最干净、最优雅的方法是什么
AB%CD3_SW3Z_1000 uvsec_czrkup_rmplr SeightRveZargrp def_move 35.8% 28.0% 16.2% 120 0.0010
MN%P03_AT%W00_500 uvsec_czrkup_rmplr SeightRveZargrp def_move 28.8% 24.7% 23.4% 94 0.1000
KE_A03_UVA%Q00_100 uvsec_czrkup_rmplr SeightRveZargrp def_move 27.2% 11.8% 3.5% 398 0.010
当然,我问的是一般情况,假设每一行都有相同数量的标记。我希望列左对齐。
您可以这样做的一种方法是使用 str.ljust(width)
(假设您已将所有内容都转换为字符串)填充每行中的每个标记,使列中的每个标记具有相同的宽度。要确定您要使用的宽度,请设置固定宽度(如果您知道标记的最大可能长度)或者通过获取每列中的最大条目来为每列设置固定宽度。
我过去曾将 PrettyTables 用于此类应用程序和此功能:
def format_df(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
完整示例,使用您的输入如下所示:
import pandas as pd
from prettytable import PrettyTable
def format_df(df):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)
return str(table)
df = pd.read_clipboard(header=None) # No header provided on example input
print(format_df(df))
这会生成以下输出。 headers 命名不当,因为您的示例数据中没有提供 headers:
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+
| 0 | AB%CD3_SW3Z_1000 | uvsec_czrkup_rmplr | SeightRveZargrp | def_move | 35.8% | 28.0% | 16.2% | 120 | 0.001 |
| 1 | MN%P03_AT%W00_500 | uvsec_czrkup_rmplr | SeightRveZargrp | def_move | 28.8% | 24.7% | 23.4% | 94 | 0.1 |
| 2 | KE_A03_UVA%Q00_100 | uvsec_czrkup_rmplr | SeightRveZargrp | def_move | 27.2% | 11.8% | 3.5% | 398 | 0.01 |
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+