Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing Lists as Tabular Data

Tags:

python

I am quite new to Python and I am now struggling with formatting my data nicely for printed output.

I have one list that is used for two headings, and a matrix that should be the contents of the table. Like so:

teams_list = ["Man Utd", "Man City", "T Hotspur"] data = np.array([[1, 2, 1],                  [0, 1, 0],                  [2, 4, 2]]) 

Note that the heading names are not necessarily the same lengths. The data entries are all integers, though.

Now, I want to represent this in a table format, something like this:

            Man Utd   Man City   T Hotspur   Man Utd         1          0           0  Man City         1          1           0 T Hotspur         0          1           2 

I have a hunch that there must be a data structure for this, but I cannot find it. I have tried using a dictionary and formatting the printing, I have tried for-loops with indentation and I have tried printing as strings.

I am sure there must be a very simple way to do this, but I am probably missing it due to lack of experience.

like image 429
hjweide Avatar asked Mar 02 '12 15:03

hjweide


People also ask

Which library is used when data is in tabular format?

Use the Pandas library to do statistics on tabular data. Pandas is a widely-used Python library for statistics, particularly on tabular data.

What is tabular data in Python?

Tabular is a package of Python modules for working with tabular data. Its main object is the tabarray class, a data structure for holding and manipulating tabular data. By putting data into a tabarray object, you'll get a representation of the data that is more flexible and powerful than a native Python representation.


2 Answers

There are some light and useful python packages for this purpose:

1. tabulate: https://pypi.python.org/pypi/tabulate

from tabulate import tabulate print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age'])) 
Name      Age ------  ----- Alice      24 Bob        19 

tabulate has many options to specify headers and table format.

print(tabulate([['Alice', 24], ['Bob', 19]], headers=['Name', 'Age'], tablefmt='orgtbl')) 
| Name   |   Age | |--------+-------| | Alice  |    24 | | Bob    |    19 | 

2. PrettyTable: https://pypi.python.org/pypi/PrettyTable

from prettytable import PrettyTable t = PrettyTable(['Name', 'Age']) t.add_row(['Alice', 24]) t.add_row(['Bob', 19]) print(t) 
+-------+-----+ |  Name | Age | +-------+-----+ | Alice |  24 | |  Bob  |  19 | +-------+-----+ 

PrettyTable has options to read data from csv, html, sql database. Also you are able to select subset of data, sort table and change table styles.

3. texttable: https://pypi.python.org/pypi/texttable

from texttable import Texttable t = Texttable() t.add_rows([['Name', 'Age'], ['Alice', 24], ['Bob', 19]]) print(t.draw()) 
+-------+-----+ | Name  | Age | +=======+=====+ | Alice | 24  | +-------+-----+ | Bob   | 19  | +-------+-----+ 

with texttable you can control horizontal/vertical align, border style and data types.

4. termtables: https://github.com/nschloe/termtables

import termtables as tt  string = tt.to_string(     [["Alice", 24], ["Bob", 19]],     header=["Name", "Age"],     style=tt.styles.ascii_thin_double,     # alignment="ll",     # padding=(0, 1), ) print(string) 
+-------+-----+ | Name  | Age | +=======+=====+ | Alice | 24  | +-------+-----+ | Bob   | 19  | +-------+-----+ 

with texttable you can control horizontal/vertical align, border style and data types.

Other options:

  • terminaltables Easily draw tables in terminal/console applications from a list of lists of strings. Supports multi-line rows.
  • asciitable Asciitable can read and write a wide range of ASCII table formats via built-in Extension Reader Classes.
like image 153
iman Avatar answered Sep 21 '22 15:09

iman


Some ad-hoc code:

row_format ="{:>15}" * (len(teams_list) + 1) print(row_format.format("", *teams_list)) for team, row in zip(teams_list, data):     print(row_format.format(team, *row)) 

This relies on str.format() and the Format Specification Mini-Language.

like image 24
Sven Marnach Avatar answered Sep 21 '22 15:09

Sven Marnach