2016-07-06 6 views
1

у меня есть выход, который выглядит, как этотPython - печать таблиц типа данных чисто

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 

Конечно, я прошу в общем случае, если каждая строка имеет одинаковое количество токенов. Я хочу, чтобы столбцы были оставлены.

+0

Проблема в том, что это информационная рамка. Когда я печатаю его, он выглядит таким грязным. –

ответ

1

Я использовал 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)) 

Это генерирует следующий вывод , Заголовки названы плохо, потому что в ваших данных выборки не были указаны заголовки:

+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+ 
| |   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 | 
+---+--------------------+--------------------+-----------------+----------+-------+-------+-------+-----+-------+ 
1

Один из способов сделать это - использовать str.ljust(width) (при условии, что вы преобразовали все в строку), чтобы поместить каждый токен в каждую строку, чтобы каждый токен в столбце был одинаковой ширины. Чтобы определить, какую ширину вы хотите использовать, установите фиксированную ширину (если вы знаете максимально возможную длину токена) или, возможно, установите фиксированную ширину для каждого столбца, получив самую большую запись в каждом столбце.