2012-03-14 35 views
13

Tôi muốn in dữ liệu mảng bảng NumPy để trông đẹp mắt. R và bàn giao tiếp cơ sở dữ liệu dường như chứng tỏ khả năng tốt để làm điều này. Tuy nhiên, built-in in mảng bảng NumPy của trông giống như rác:NumPy: Dữ liệu dạng bảng in đẹp

import numpy as np 
dat_dtype = { 
    'names' : ('column_one', 'col_two', 'column_3'), 
    'formats' : ('i', 'd', '|S12')} 
dat = np.zeros(4, dat_dtype) 
dat['column_one'] = range(4) 
dat['col_two'] = 10**(-np.arange(4, dtype='d') - 4) 
dat['column_3'] = 'ABCD' 
dat['column_3'][2] = 'long string' 

print(dat) 
# [(0, 0.0001, 'ABCD') (1, 1.0000000000000001e-005, 'ABCD') 
# (2, 9.9999999999999995e-007, 'long string') 
# (3, 9.9999999999999995e-008, 'ABCD')] 

print(repr(dat)) 
# array([(0, 0.0001, 'ABCD'), (1, 1.0000000000000001e-005, 'ABCD'), 
#  (2, 9.9999999999999995e-007, 'long string'), 
#  (3, 9.9999999999999995e-008, 'ABCD')], 
#  dtype=[('column_one', '<i4'), ('col_two', '<f8'), ('column_3', '|S12')]) 

Tôi muốn cái gì đó trông giống như những gì một cơ sở dữ liệu spits ra, ví dụ, postgres kiểu:

column_one | col_two | column_3 
------------+---------+------------- 
      0 | 0.0001 | ABCD 
      1 | 1e-005 | long string 
      2 | 1e-008 | ABCD 
      3 | 1e-007 | ABCD 

Are có bất kỳ thư viện Python bên thứ ba nào tốt để định dạng các bảng ASCII trông đẹp mắt không?

Tôi đang sử dụng Python 2.5, NumPy 1.3.0.

+0

Câu hỏi này [Python: pretty-printing ascii tables?] (Http://stackoverflow.com/q/5909873/404469) có thể hữu ích. – gary

Trả lời

19

tôi dường như có đầu ra tốt với prettytable:

from prettytable import PrettyTable 
x = PrettyTable(dat.dtype.names) 
for row in dat: 
    x.add_row(row) 
# Change some column alignments; default was 'c' 
x.align['column_one'] = 'r' 
x.align['col_two'] = 'r' 
x.align['column_3'] = 'l' 

Và đầu ra không phải là xấu. Thậm chí còn có một công tắc border, trong số một vài lựa chọn khác:

>>> print(x) 
+------------+---------+-------------+ 
| column_one | col_two | column_3 | 
+------------+---------+-------------+ 
|   0 | 0.0001 | ABCD  | 
|   1 | 1e-005 | ABCD  | 
|   2 | 1e-006 | long string | 
|   3 | 1e-007 | ABCD  | 
+------------+---------+-------------+ 
>>> print(x.get_string(border=False)) 
column_one col_two column_3 
      0 0.0001 ABCD   
      1 1e-005 ABCD   
      2 1e-006 long string 
      3 1e-007 ABCD   
+0

Chỉ muốn thêm nhận xét 'prettytable' hiện là một phần của PyPI kể từ ngày 7 tháng 4 năm 2013: https://pypi.python.org/pypi/PrettyTable. Vì vậy, bạn chỉ có thể sử dụng 'pip' hoặc' easy_install' để cài đặt nó ngay bây giờ thay vì tải xuống thông qua Google Code. BTW cảm ơn cho tip ở đây. +1. – rayryeng

5

Bạn có thể muốn kiểm tra Pandas trong đó có rất nhiều tính năng thú vị để đối phó với dữ liệu bảng và dường như nằm điều ra tốt hơn khi in (Nó được thiết kế là một thay thế python cho R):

http://pandas.pydata.org/

6

bạn có thể tận dụng sự hiểu biết mảng và định dạng sử dụng printf chuỗi:

for c1, c2, c3 in dat: 
    print "%2f | %8e | %s" % (c1, c2, c3) 

https://en.wikipedia.org/wiki/Printf_format_string
và bạn có thể nhận cu thậm chí nhiều hơn stomized nếu bạn đi lên đến phiên bản 2.7

0

Gói tabulate hoạt động độc đáo cho NumPy mảng:

import numpy as np 
from tabulate import tabulate 

m = np.array([[1, 2, 3], [4, 5, 6]]) 
headers = ["col 1", "col 2", "col 3"] 

# tabulate data 
table = tabulate(m, headers, tablefmt="fancy_grid") 

# output 
print(table) 

(Trên code đang Python 3; cho Python 2 thêm from __future__ import print_function ở đầu của kịch bản)

Output:

╒═════════╤═════════╤═════════╕ 
│ col 1 │ col 2 │ col 3 │ 
╞═════════╪═════════╪═════════╡ 
│  1 │  2 │  3 │ 
├─────────┼─────────┼─────────┤ 
│  4 │  5 │  6 │ 
╘═════════╧═════════╧═════════╛ 

Gói cài đặt qua pip:

$ pip install tabulate  # (use pip3 for Python 3 on some systems) 
Các vấn đề liên quan