Форматирование таблиц в Python: библиотека tabulate

Табличные данные — это структурированные данные в строках и столбцах. Такая структуризация позволяет легко интерпретировать выводимые данные, поэтому она очень важна. А создавать красивые табличные данные в Python нам помогает библиотека tabulate.

Библиотека tabulate проста в использовании. Она стала одним из любимых инструментов для специалистов по анализу данных и разработчиков, которым необходимо создавать чисто отформатированные таблицы.

Содержание

Что собой представляет библиотека tabulate?

Пакет tabulate в Python создает хорошо отформатированные таблицы из различных источников данных. Основные области применения tabulate следующие:

  • Отображение данных в интерфейсах командной строки (CLI). Пакет tabulate помогает разработчикам отображать отформатированные таблицы в удобном для чтения виде в терминале или консоли.
  • Блокноты Jupyter. Функция tabulate() помогает отображать красивые таблицы в Jupyter Notebooks.
  • Веб-приложения. Пакет tabulate помогает разработчикам отображать таблицы в формате HTML в веб-приложениях.

Среди ключевых особенностей библиотеки tabulate можно выделить следующие:

  • Несколько форматов вывода. Пакет tabulate позволяет выводить таблицы в различных форматах, включая обычный текст, HTML, LaTeX и другие. Таким образом, пользователи могут выбирать в зависимости от конкретного случая использования.
  • Автоматическое выравнивание столбцов. Tabulate автоматически выравнивает столбцы различных типов данных, включая строки и числа.
  • Работа с различными структурами данных. Tabulate работает со словарями, списками, Pandas DataFrames и массивами NumPy.

Как установить tabulate в Python?

Для установки пакета tabulate в Python можно использовать менеджер пакетов pip. В терминале или командной строке введите следующую строку:

pip install tabulate

Если вы хотите установить пакет для одного пользователя, не запрашивая права администратора, вы можете использовать флаг -user, как показано ниже.

pip install --user tabulate

При запуске скриптов в виртуальной среде можно создать новую виртуальную среду с помощью следующей команды:

python -m venv myenv

Чтобы активировать виртуальную среду, выполните следующие команды.

Для Windows:

myenv\Scripts\activate

Для macOS/Linux:

source myenv/bin/activate

Если установка прошла успешно, вы можете выполнить следующий код в редакторе Python, чтобы проверить номер версии пакета tabulate в среде Python.

import tabulate
print(tabulate.__version__)

Основные возможности использования tabulate

В примерах ниже показано базовое использование пакета tabulate для создания форматированных таблиц.

Создание простых таблиц

Самый простой способ использовать функцию tabulate() для создания таблиц — это предоставить ей список списков. Ключевыми аргументами в синтаксисе функции tabulate() являются следующие:

  • tabular_data. Данные для форматирования, например список списков или словарей.
  • headers. Заголовки, которые должны быть представлены в таблице. Если этот аргумент опущен, таблица не будет содержать заголовков.
  • tablefmt. Формат вывода таблицы, например plain, pipe, grid или html.

В примере ниже показано, как использовать функцию tabulate() для создания таблицы в формате сетки.

# Import the tabulate module
from tabulate import tabulate

# Sample data: list of lists
data = [
    ["Alice", 24, "Engineer"],
    ["Bob", 30, "Data Scientist"],
    ["Charlie", 28, "Teacher"]
]

# Creating a table with headers and a grid format
table = tabulate(
    data, 
    headers=["Name", "Age", "Profession"], 
    tablefmt="grid"
)

print(table)

Таблица, отформатированная в стиле grid. Здесь и далее скриншоты сделаны автором статьи.

Отображение данных из Pandas DataFrames

Pandas DataFrame — это распространенная структура для работы с табличными данными в Python. Используя библиотеку tabulate, вы можете представлять табличные данные в различных форматах в соответствии с требуемыми спецификациями.

В следующем примере показано, как отобразить таблицу, используя формат pipe.

# Import libraries
import pandas as pd
from tabulate import tabulate

# Sample DataFrame
df = pd.DataFrame({
    "Name": ["Alice", "Bob", "Charlie"],
    "Age": [24, 30, 28],
    "Profession": ["Engineer", "Data Scientist", "Teacher"]
})

# Displaying the DataFrame as a formatted table
table = tabulate(
    df, 
    headers='keys', 
    tablefmt='pipe'
)

print(table)

Вывод таблицы, отформатированной в стиле pipe.

Используя тот же DataFrame, df, можно вывести таблицу в формате grid.

print(tabulate(df, headers='keys', tablefmt='grid'))

Вывод таблицы, отформатированной в стиле grid.

Расширенные возможности библиотеки tabulate

Библиотека tabulate предлагает расширенные возможности, которые позволяют настраивать внешний вид сложных таблиц. Давайте рассмотрим некоторые из них.

Настройка внешнего вида таблицы

Библиотека tabulate предлагает различные способы настройки внешнего вида таблиц, такие как регулировка выравнивания, установка ширины столбцов и использование различных форматов таблиц. Вот некоторые из ключевых опций форматирования:

  • numalign. Управляет выравниванием числовых столбцов. Допустимые значения: left, center и right.
  • stralign. Управляет выравниванием столбцов со строками. Допустимые значения: left, center и right.
  • colalign. Позволяет выравнивать отдельные столбцы, предоставляя список вариантов выравнивания.

В примере ниже показано применение этих параметров форматирования.

from tabulate import tabulate

# Sample data: list of lists
data = [
    ["Alice", 24, 1200.50],
    ["Bob", 30, 3500.75],
    ["Charlie", 28, 2500.00]
]

# Customizing table appearance
table = tabulate(
    data,
    headers=["Name", "Age", "Salary"],
    tablefmt="fancy_grid",
    numalign="right",
    stralign="center",
    colalign=("center", "center", "right")
)

print(table)

Кастомизированный вывод таблицы.

Работа с многострочными ячейками

Библиотека tabulate также позволяет обрабатывать текстовые данные, превышающие типичную ширину столбцов. Аргумент maxcolwidths задает максимальную ширину каждой ячейки в выходной таблице для управления обертыванием текста внутри ячеек. Эта функция позволяет отображать длинную информацию в более удобочитаемом виде.

В приведенном ниже примере значение maxcolwidths установлено в 30 символов, чтобы обернуть текстовые данные в несколько строк, если они превышают указанное количество символов.

# Import tabulate library
from tabulate import tabulate

# Sample text data
data = [
    ["Alice", "Lorem ipsum dolor sit amet, consectetur adipiscing elit."],
    ["Bob", "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."],
    ["Charlie", "Ut enim ad minim veniam, quis nostrud exercitation ullamco."]
]

# Creating a table with multiline cells
table = tabulate(
    data,
    headers=["Name", "Description"],
    tablefmt="grid",
    maxcolwidths=[None, 30]  # Set maximum width for the Description column
)

print(table)

Вывод таблицы с многострочными ячейками.

Использование утилиты командной строки

Библиотека tabulate предоставляет утилиту командной строки, которая помогает отображать таблицы непосредственно из командной строки или терминала. Эта утилита позволяет генерировать таблицы без написания дополнительного кода Python.

Предположим, у вас есть CSV-файл с именем data.csv. Для создания таблицы с помощью tabulate вы используете следующую команду:

cat data.csv | tabulate -d , -f grid

Здесь:

  • cat data.csv считывает содержимое CSV-файла
  • -d, задает разделитель (для CSV — запятая)
  • -f grid устанавливает формат вывода в виде сетки

Практические примеры использования

В этом разделе мы рассмотрим различные случаи использования библиотеки tabulate для отображения таблиц в Python.

Отображение данных о продажах

Предположим, что у нас есть следующие данные о продажах:

# Sample sales data
sales_data = [
    ["Q1", 15000, 12000, 13000],
    ["Q2", 17000, 16000, 14500],
    ["Q3", 18000, 15000, 16000],
    ["Q4", 20000, 21000, 19000]
]

headers = ["Quarter", "Product A", "Product B", "Product C"]

Вы можете отобразить эти данные в таблице, используя формат fancy_grid.

# Import tabulate library
from tabulate import tabulate

# Displaying sales data using the 'fancy_grid' format
table_fancy = tabulate(sales_data, headers=headers, tablefmt="fancy_grid")

print(table_fancy)

Вывод таблицы, отформатированной в стиле fancy_grid.

Также можно отобразить данные в формате HTML, установив для tablefmt значение html.

# Displaying sales data using the 'html' format
table_html = tabulate(sales_data, headers=headers, tablefmt="HTML")

print(table_html)
<table>
<thead>
<tr><th>Quarter  </th><th style="text-align: right;">  Product A</th><th style="text-align: right;">  Product B</th><th style="text-align: right;">  Product C</th></tr>
</thead>
<tbody>
<tr><td>Q1       </td><td style="text-align: right;">      15000</td><td style="text-align: right;">      12000</td><td style="text-align: right;">      13000</td></tr>
<tr><td>Q2       </td><td style="text-align: right;">      17000</td><td style="text-align: right;">      16000</td><td style="text-align: right;">      14500</td></tr>
<tr><td>Q3       </td><td style="text-align: right;">      18000</td><td style="text-align: right;">      15000</td><td style="text-align: right;">      16000</td></tr>
<tr><td>Q4       </td><td style="text-align: right;">      20000</td><td style="text-align: right;">      21000</td><td style="text-align: right;">      19000</td></tr>
</tbody>
</table>

Вывод таблицы в формате HTML полезен при веб-интеграции, если вы хотите встроить вывод таблицы в сайт. Вы также можете дополнительно настроить вывод HTML-таблиц с помощью CSS, чтобы они выглядели более привлекательно для пользователя.

Интеграция с Jupyter Notebooks

Библиотеку tabulate можно легко интегрировать с блокнотами Jupyter для более удобного представления данных. В примере ниже показано, как создать образец DataFrame в Jupyter Notebook и отобразить его в таблице в формате сетки.

# Import required library
import pandas as pd
from tabulate import tabulate

# Sample student exam scores DataFrame
exam_scores_df = pd.DataFrame({
    "Student": ["Alice", "Bob", "Charlie", "David"],
    "Math": [85, 90, 78, 92],
    "Science": [88, 76, 95, 85],
    "English": [90, 88, 84, 91]
})

# Displaying the DataFrame as a formatted table using 'grid' format
table_jupyter = tabulate(exam_scores_df, headers='keys', tablefmt='grid')

print(table_jupyter)

Вывод таблицы, созданный в результате интеграции tabulate и Jupyter Notebook.

Преимущество использования библиотеки tabulate в среде Jupyter заключается в том, что она улучшает читаемость и сопоставление данных, особенно для задач анализа данных.

Заключение

Библиотека tabulate важна для создания красиво оформленных таблиц на Python. Как вы видели, она также достаточно гибкая для использования в различных средах, таких как блокноты Jupyter, командная строка и веб-приложения.

Перевод статьи “Python Tabulate: A Full Guide”.

Прокрутить вверх