НейроАгент

Полное руководство по красивому выводу Pandas DataFrames

Узнайте, как выводить полностью Pandas DataFrames и Series в терминале с полным отображением, правильным выравниванием, границами и опциями цветового кодирования. Полное руководство с практическими примерами.

Как полностью и красиво выводить (pretty-print) Pandas Series или DataFrame в терминале с полным отображением, правильным выравниванием, рамками и опциями цветового кодирования?

НейроАгент

Красивый вывод Pandas Series и DataFrame в терминале

Чтобы вывести полностью Pandas Series или DataFrame в терминале с полным отображением, правильным выравниванием, границами и цветовой кодировкой, можно использовать комбинацию встроенных параметров отображения Pandas, методов стилизации и методов форматирования, специфичных для терминала. Ключевые подходы включают настройку параметров отображения для полной видимости, использование атрибута style для расширенного форматирования и использование возможностей терминала для цветового выделения с целью улучшения читаемости.

Содержание

Базовая конфигурация отображения

Pandas предоставляет несколько параметров конфигурации для контроля того, как объекты отображаются в терминале. Эти настройки гарантируют, что весь набор данных будет виден с правильным форматированием.

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

Функция pd.set_option() позволяет управлять поведением отображения:

python
import pandas as pd

# Отображение всех строк и столбцов
pd.set_option('display.max_rows', None)  # Показать все строки
pd.set_option('display.max_columns', None)  # Показать все столбцы
pd.set_option('display.width', None)  # Ограничение по ширине отсутствует
pd.set_option('display.max_colwidth', None)  # Показать полное содержимое столбца

Контроль точности отображения

Управление количеством отображаемых десятичных знаков:

python
pd.set_option('display.precision', 2)  # Показывать 2 знака после запятой
pd.set_option('display.float_format', '{:.2f}'.format)  # Форматировать все числа с плавающей точкой

Менеджер контекста для временных настроек

Для временных изменений отображения без влияния на глобальные настройки:

python
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print(your_dataframe)

Расширенные параметры отображения

Использование метода to_string()

Метод to_string() предоставляет широкие возможности настройки:

python
df.to_string(
    max_rows=None,           # Показать все строки
    max_cols=None,           # Показать все столбцы  
    line_width=None,         # Ограничение по ширине отсутствует
    col_space=None,          # Автоматическое расстояние между столбцами
    header=True,             # Показать заголовки столбцов
    index=True,              # Показать индексы строк
    na_rep='NA',             # Представление пропущенных значений
    justify='left',          # Выравнивание столбцов
    float_format='%.2f',     # Форматирование чисел с плавающей точкой
    sparsify=True,           # Удалить дублирующиеся имена индексов
    show_dimensions=True     # Показать размеры DataFrame
)

Параметры форматирования

  • justify: ‘left’, ‘right’, ‘center’ или ‘justify’
  • col_space: Минимальная ширина для каждого столбца
  • decimal: Разделитель десятичных знаков
  • thousands: Разделитель тысяч

Интеграция с HTML-отображением

Для расширенных возможностей терминала:

python
from IPython.display import HTML
HTML(df.to_html())

Стилизация и форматирование

Стилизация DataFrame с помощью style

Стилизация Pandas предоставляет мощные возможности форматирования:

python
# Базовая стилизация
df.style.format({
    'numeric_column': '{:.2f}',
    'percentage_column': '{:.1%}'
})

# Условное форматирование
def highlight_max(s):
    is_max = s == s.max()
    return ['background-color: yellow' if v else '' for v in is_max]

df.style.apply(highlight_max)

Методы стилизации

  • style.format(): Форматирование определенных столбцов
  • style.apply(): Применение пользовательских функций стилизации
  • style.background_gradient(): Цветовые градиенты
  • style.bar(): Столбчатые диаграммы внутри ячеек
  • style.set_properties(): Установка CSS-свойств

Комбинирование нескольких стилей

python
(df.style
   .format({'price': '${:,.2f}'})
   .background_gradient(subset=['sales'], cmap='Greens')
   .apply(highlight_max, subset=['profit'])
   .set_table_styles([{
       'selector': 'th',
       'props': [('background-color', '#f7f7f9')]
   }]))

Цветовая кодировка и визуальное улучшение

Встроенные цветовые карты

Pandas поддерживает различные цветовые схемы:

python
# Градиенты фона
df.style.background_gradient(cmap='viridis')

# Стиль тепловой карты
df.style.background_gradient(cmap='RdYlBu', subset=['numeric_columns'])

# Столбчатые диаграммы
df.style.bar(color='lightblue', subset=['numeric_columns'])

Пользовательские цветовые функции

Создание пользовательской цветовой кодировки:

python
def color_negative_red(val):
    color = 'red' if val < 0 else 'green'
    return f'color: {color}'

df.style.applymap(color_negative_red)

Цветовые схемы по типу данных

python
# Числовые столбцы - синий градиент
numeric_cols = df.select_dtypes(include=['number']).columns

# Категориальные столбцы - желтый фон
categorical_cols = df.select_dtypes(include=['object']).columns

(df.style
   .background_gradient(cmap='Blues', subset=numeric_cols)
   .applymap(lambda x: 'background-color: yellow' 
             if isinstance(x, str) else '', subset=categorical_cols))

Стилизация текста

python
def bold_text(val):
    return 'font-weight: bold'

df.style.applymap(bold_text, subset=['important_columns'])

Специфические для терминала соображения

Поддержка цвета в терминале

Проверка и использование возможностей терминала для цветового выделения:

python
import sys
print(sys.stdout.isatty())  # Проверить, поддерживает ли терминал цвет

Коды цвета ANSI

Для прямого форматирования цвета в терминале:

python
class Colors:
    RED = '\033[91m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    BLUE = '\033[94m'
    MAGENTA = '\033[95m'
    CYAN = '\033[96m'
    WHITE = '\033[97m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
    END = '\033[0m'

print(f"{Colors.BOLD}{Colors.GREEN}Успех!{Colors.END}")

Интеграция с библиотекой Rich

Библиотека rich предоставляет расширенное форматирование для терминала:

python
from rich.console import Console
from rich.table import Table

console = Console()

table = Table(show_header=True, header_style="bold magenta")
table.add_column("Столбец 1", style="dim")
table.add_column("Столбец 2", justify="right")

for row in df.itertuples():
    table.add_row(str(row[1]), str(row[2]))

console.print(table)

Определение размера терминала

python
import shutil
terminal_width = shutil.get_terminal_size().columns
terminal_height = shutil.get_terminal_size().lines

print(f"Размер терминала: {terminal_width}x{terminal_height}")

Практические примеры

Полная функция красивого вывода

python
def pretty_print_dataframe(df, max_rows=None, max_cols=None, 
                          highlight_numeric=True, color_scheme='viridis'):
    """
    Расширенная функция красивого вывода для DataFrame с полными параметрами отображения.
    """
    # Установка параметров отображения
    with pd.option_context('display.max_rows', max_rows,
                          'display.max_columns', max_cols,
                          'display.width', None,
                          'display.precision', 2):
        
        # Применение стилизации, если требуется
        if highlight_numeric:
            numeric_cols = df.select_dtypes(include=['number']).columns
            styled = df.style.background_gradient(cmap=color_scheme, subset=numeric_cols)
            return styled
        else:
            return df

# Использование
pretty_print_dataframe(your_dataframe, max_rows=50, color_scheme='plasma')

Пример с финансовыми данными

python
import numpy as np

# Создание примера финансовых данных
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=10)
financial_data = pd.DataFrame({
    'Дата': dates,
    'Выручка': np.random.uniform(1000, 5000, 10),
    'Расходы': np.random.uniform(500, 2000, 10),
    'Прибыль': np.random.uniform(200, 3000, 10),
    'Темп_роста': np.random.uniform(-0.1, 0.3, 10)
})

# Форматирование и отображение
financial_formatted = (financial_data.style
    .format({
        'Выручка': '{:,.2f}₽',
        'Расходы': '{:,.2f}₽',
        'Прибыль': '{:,.2f}₽',
        'Темп_роста': '{:.1%}'
    })
    .background_gradient(cmap='RdYlGn', subset=['Прибыль'])
    .applymap(lambda x: 'color: red' if x < 0 else 'color: green', 
              subset=['Темп_роста'])
    .set_table_styles([{
        'selector': 'th',
        'props': [('background-color', '#f8f9fa'), 
                 ('color', '#495057'),
                 ('font-weight', 'bold')]
    }])
    .set_properties(**{'text-align': 'right'}, subset=['Выручка', 'Расходы', 'Прибыль'])
    .set_properties(**{'text-align': 'center'}))

financial_formatted

Статистический сводка с цветовой кодировкой

python
# Создание статистического описания
stats_summary = df.describe().T

# Расширенное отображение статистического описания
(stats_summary.style
    .format({'count': '{:.0f}',
             'mean': '{:.2f}',
             'std': '{:.2f}',
             'min': '{:.2f}',
             '25%': '{:.2f}',
             '50%': '{:.2f}',
             '75%': '{:.2f}',
             'max': '{:.2f}'})
    .background_gradient(cmap='coolwarm', subset=['mean', 'std'])
    .applymap(lambda x: 'font-weight: bold' if x > stats_summary['mean'].mean() else '',
              subset=['mean'])
    .set_caption('Статистическое описание с цветовой кодировкой')
    .set_table_styles([
        {'selector': 'caption',
         'props': [('caption-side', 'top'),
                  ('font-size', '16px'),
                  ('font-weight', 'bold'),
                  ('color', '#2c3e50')]}
    ]))

Заключение

Для эффективного красивого вывода Pandas DataFrame и Series в вашем терминале комбинируйте встроенные параметры отображения Pandas с расширенными методами стилизации. Начните с базовой конфигурации отображения с помощью pd.set_option() для обеспечения полной видимости, затем используйте атрибут style для сложного форматирования, включая цветовые градиенты, условное форматирование и пользовательское CSS-стилизирование. Для расширенных возможностей терминала рассмотрите интеграцию библиотек, таких как rich, или прямое использование кодов цвета ANSI. Помните о балансе между визуальной привлекательностью и читаемостью, особенно для больших наборов данных, и используйте менеджеры контекста для временных изменений отображения без влияния на ваши глобальные настройки. Экспериментируйте с различными цветовыми схемами и параметрами форматирования, чтобы найти представление, которое лучше всего соответствует вашим данным и аналитическим потребностям.

Источники

  1. Документация Pandas - Параметры отображения
  2. Документация Pandas - Стилизация
  3. Документация Pandas - Отображение DataFrame
  4. Документация библиотеки Rich - Таблицы
  5. Примеры стилизации Pandas