Python create text table

How to Easily Create Tables in Python

How to use the tabulate function to create nicely-formatted tables in Python

Being able to quickly organize our data into a more readable format, such as when data wrangling, can be extremely helpful in order to analyze the data and plan the next steps. Python offers the ability to easily turn certain tabular data types into nicely formatted plain-text tables, and that’s with the tabulate function.

install tabulate

We first install the tabulate library using pip install in the command line:

import tabulate function

We then import the tabulate function from the tabulate library in our code:

from tabulate import tabulate

And now we are ready to use the tabulate function!

tabular data types supported by tabulate

The tabulate function can transform any of the following into an easy to read plain-text table: (from the tabulate documentation)

  • list of lists or another iterable of iterables
  • list or another iterable of dicts (keys as columns)
  • dict of iterables (keys as columns)
  • two-dimensional NumPy array
  • NumPy record arrays (names as columns)
  • pandas.DataFrame

list of lists

For example, if we have the following list of lists:

table = [['First Name', 'Last Name', 'Age'], 
['John', 'Smith', 39],
['Mary', 'Jane', 25],
['Jennifer', 'Doe', 28]]

We can turn it into into a much more readable plain-text table using the tabulate function:

Читайте также:  Шаблон программы на python

Since the first list in the list of lists contains the names of columns as its elements, we can set it as the column or header names by passing ‘firstrow’ as the argument for the headers parameter:

print(tabulate(table, headers='firstrow'))

Источник

texttable

This module is available on PyPI, and has been packaged for several Linux/Unix platforms (Debian, FreeBSD, Fedora, Suse. ).

Dependencies

If available, cjkwrap library is used instead of textwrap, for a better wrapping of CJK text.

If available, wcwidth library is used for a better rendering (basic emoji support).

Documentation

NAME texttable - module to create simple ASCII tables FILE /usr/local/lib/python2.7/dist-packages/texttable.py DESCRIPTION Example: table = Texttable() table.set_cols_align(["l", "r", "c"]) table.set_cols_valign(["t", "m", "b"]) table.add_rows([["Name", "Age", "Nickname"], ["Mr\nXavier\nHuon", 32, "Xav'"], ["Mr\nBaptiste\nClement", 1, "Baby"], ["Mme\nLouise\nBourgeau", 28, "Lou\n\nLoue"]]) print(table.draw()) print() table = Texttable() table.set_deco(Texttable.HEADER) table.set_cols_dtype(['t', # text 'f', # float (decimal) 'e', # float (exponent) 'i', # integer 'a']) # automatic table.set_cols_align(["l", "r", "r", "r", "l"]) table.add_rows([["text", "float", "exp", "int", "auto"], ["abcd", "67", 654, 89, 128.001], ["efghijk", 67.5434, .654, 89.6, 12800000000000000000000.00023], ["lmn", 5e-78, 5e-78, 89.4, .000000000000128], ["opqrstu", .023, 5e+78, 92., 12800000000000000000000]]) print(table.draw()) Result: +----------+-----+----------+ | Name | Age | Nickname | +==========+=====+==========+ | Mr | | | | Xavier | 32 | | | Huon | | Xav' | +----------+-----+----------+ | Mr | | | | Baptiste | 1 | | | Clement | | Baby | +----------+-----+----------+ | Mme | | Lou | | Louise | 28 | | | Bourgeau | | Loue | +----------+-----+----------+ text float exp int auto ============================================== abcd 67.000 6.540e+02 89 128.001 efghijk 67.543 6.540e-01 90 1.280e+22 lmn 0.000 5.000e-78 89 0.000 opqrstu 0.023 5.000e+78 92 1.280e+22 CLASSES class Texttable | Methods defined here: | | __init__(self, max_width=80) | Constructor | | - max_width is an integer, specifying the maximum width of the table | - if set to 0, size is unlimited, therefore cells won't be wrapped | | add_row(self, array) | Add a row in the rows stack | | - cells can contain newlines and tabs | | add_rows(self, rows, header=True) | Add several rows in the rows stack | | - The 'rows' argument can be either an iterator returning arrays, | or a by-dimensional array | - 'header' specifies if the first row should be used as the header | of the table | | draw(self) | Draw the table | | - the table is returned as a whole string | | header(self, array) | Specify the header of the table | | reset(self) | Reset the instance | | - reset rows and header | | set_chars(self, array) | Set the characters used to draw lines between rows and columns | | - the array should contain 4 fields: | | [horizontal, vertical, corner, header] | | - default is set to: | | ['-', '|', '+', '='] | | set_cols_align(self, array) | Set the desired columns alignment | | - the elements of the array should be either "l", "c" or "r": | | * "l": column flushed left | * "c": column centered | * "r": column flushed right | | set_cols_dtype(self, array) | Set the desired columns datatype for the cols. | | - the elements of the array should be either a callable or any of | "a", "t", "f", "e" or "i": | | * "a": automatic (try to use the most appropriate datatype) | * "t": treat as text | * "f": treat as float in decimal format | * "e": treat as float in exponential format | * "i": treat as int | * a callable: should return formatted string for any value given | | - by default, automatic datatyping is used for each column | | set_cols_valign(self, array) | Set the desired columns vertical alignment | | - the elements of the array should be either "t", "m" or "b": | | * "t": column aligned on the top of the cell | * "m": column aligned on the middle of the cell | * "b": column aligned on the bottom of the cell | | set_cols_width(self, array) | Set the desired columns width | | - the elements of the array should be integers, specifying the | width of each column. For example: | | [10, 20, 5] | | set_deco(self, deco) | Set the table decoration | | - 'deco' can be a combination of: | | Texttable.BORDER: Border around the table | Texttable.HEADER: Horizontal line below the header | Texttable.HLINES: Horizontal lines between rows | Texttable.VLINES: Vertical lines between columns | | All of them are enabled by default | | - example: | | Texttable.BORDER | Texttable.HEADER | | set_header_align(self, array) | Set the desired header alignment | | - the elements of the array should be either "l", "c" or "r": | | * "l": column flushed left | * "c": column centered | * "r": column flushed right | | set_max_width(self, max_width) | Set the maximum width of the table | | - max_width is an integer, specifying the maximum width of the table | - if set to 0, size is unlimited, therefore cells won't be wrapped | | set_precision(self, width) | Set the desired precision for float/exponential formats | | - width must be an integer >= 0 | | - default value is set to 3 | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | BORDER = 1 | | HEADER = 2 | | HLINES = 4 | | VLINES = 8 DATA __all__ = ['Texttable', 'ArraySizeError'] __author__ = 'Gerome Fournier ' __credits__ = 'Jeff Kowalczyk:\n - textwrap improved import\n . at. __license__ = 'MIT' __version__ = '1.6.7' VERSION 1.6.7 AUTHOR Gerome Fournier CREDITS Jeff Kowalczyk: - textwrap improved import - comment concerning header output Anonymous: - add_rows method, for adding rows in one go Sergey Simonenko: - redefined len() function to deal with non-ASCII characters Roger Lew: - columns datatype specifications Brian Peterson: - better handling of unicode errors Frank Sachsenheim: - add Python 2/3-compatibility Maximilian Hils: - fix minor bug for Python 3 compatibility frinkelpi: - preserve empty lines 

Forks

Источник

3 Simple Ways to Quick Generate Text-based Tables in Python

Simple but helpful libraries to create text-based tables

Introduction

These days, I often spend some time reading about new Python packages in the mornings. Surprisingly, there have been so many simple yet useful libraries that I wish I had known about them sooner.

I tried to summarize them into different topics, and in this article today, I’d like to discuss one of these topics with you: “How to create tables in Python quickly?”.

Now, let’s see what we have here.

PrettyTable

PrettyTable is a Python package that allows you to create basic ASCII tables. Different table patterns, such as text alignment or data order, can be customized easily with simple codes. For more details, let’s look at a few examples below.

But first, installing this package by:

!pip install prettytable 
from prettytable import PrettyTable as pt

Creating table

We can apply add_row or add_column methods to generate desired tables. The table output is as follows:

tb = pt()#Add headers
tb.field_names = ["ID","Name", "Major","Grade"]
#Add rows
tb.add_row([1,"Chi", "Statistics",3.5])
tb.add_row([2,"John","Business Administration"],3.6)
tb.add_row([3,"Lily","Satistics"],3.7)
print(tb)
tb1 = pt()#Add headers
column_names = ["ID","Name", "Major"]
#Add columns
tb1.add_column(column_names[0],[1,2,3])
tb1.add_column(column_names[1],["Chi","John","Lily"])
tb1.add_column(column_names[2],["Statistics","Business Administration","Statistics"])
tb1.add_column(column_names[3],[3.5,3.6,3.7])
print(tb1)

Naming the table

We can name the table by putting the title to it with get_string(title = “table name»)

Источник

Оцените статью