Как полностью и красиво выводить (pretty-print) Pandas Series или DataFrame в терминале с полным отображением, правильным выравниванием, рамками и опциями цветового кодирования?
Красивый вывод Pandas Series и DataFrame в терминале
Чтобы вывести полностью Pandas Series или DataFrame в терминале с полным отображением, правильным выравниванием, границами и цветовой кодировкой, можно использовать комбинацию встроенных параметров отображения Pandas, методов стилизации и методов форматирования, специфичных для терминала. Ключевые подходы включают настройку параметров отображения для полной видимости, использование атрибута style для расширенного форматирования и использование возможностей терминала для цветового выделения с целью улучшения читаемости.
Содержание
- Базовая конфигурация отображения
- Расширенные параметры отображения
- Стилизация и форматирование
- Цветовая кодировка и визуальное улучшение
- Специфические для терминала соображения
- Практические примеры
Базовая конфигурация отображения
Pandas предоставляет несколько параметров конфигурации для контроля того, как объекты отображаются в терминале. Эти настройки гарантируют, что весь набор данных будет виден с правильным форматированием.
Отображение полных DataFrame
Функция pd.set_option() позволяет управлять поведением отображения:
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) # Показать полное содержимое столбца
Контроль точности отображения
Управление количеством отображаемых десятичных знаков:
pd.set_option('display.precision', 2) # Показывать 2 знака после запятой
pd.set_option('display.float_format', '{:.2f}'.format) # Форматировать все числа с плавающей точкой
Менеджер контекста для временных настроек
Для временных изменений отображения без влияния на глобальные настройки:
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
print(your_dataframe)
Расширенные параметры отображения
Использование метода to_string()
Метод to_string() предоставляет широкие возможности настройки:
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-отображением
Для расширенных возможностей терминала:
from IPython.display import HTML
HTML(df.to_html())
Стилизация и форматирование
Стилизация DataFrame с помощью style
Стилизация Pandas предоставляет мощные возможности форматирования:
# Базовая стилизация
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-свойств
Комбинирование нескольких стилей
(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 поддерживает различные цветовые схемы:
# Градиенты фона
df.style.background_gradient(cmap='viridis')
# Стиль тепловой карты
df.style.background_gradient(cmap='RdYlBu', subset=['numeric_columns'])
# Столбчатые диаграммы
df.style.bar(color='lightblue', subset=['numeric_columns'])
Пользовательские цветовые функции
Создание пользовательской цветовой кодировки:
def color_negative_red(val):
color = 'red' if val < 0 else 'green'
return f'color: {color}'
df.style.applymap(color_negative_red)
Цветовые схемы по типу данных
# Числовые столбцы - синий градиент
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))
Стилизация текста
def bold_text(val):
return 'font-weight: bold'
df.style.applymap(bold_text, subset=['important_columns'])
Специфические для терминала соображения
Поддержка цвета в терминале
Проверка и использование возможностей терминала для цветового выделения:
import sys
print(sys.stdout.isatty()) # Проверить, поддерживает ли терминал цвет
Коды цвета ANSI
Для прямого форматирования цвета в терминале:
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 предоставляет расширенное форматирование для терминала:
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)
Определение размера терминала
import shutil
terminal_width = shutil.get_terminal_size().columns
terminal_height = shutil.get_terminal_size().lines
print(f"Размер терминала: {terminal_width}x{terminal_height}")
Практические примеры
Полная функция красивого вывода
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')
Пример с финансовыми данными
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
Статистический сводка с цветовой кодировкой
# Создание статистического описания
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. Помните о балансе между визуальной привлекательностью и читаемостью, особенно для больших наборов данных, и используйте менеджеры контекста для временных изменений отображения без влияния на ваши глобальные настройки. Экспериментируйте с различными цветовыми схемами и параметрами форматирования, чтобы найти представление, которое лучше всего соответствует вашим данным и аналитическим потребностям.