Как использовать библиотеку Pandas в Python: руководство для новичков

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Для кого эта статья:

  • начинающие и опытные программисты, желающие улучшить свои навыки в анализе данных на Python
  • специалисты в области data science и аналитики
  • студенты и слушатели курсов по Python и аналитике данных

    Аналитика данных без Pandas — как паста без соуса: вроде съедобно, но чего-то явно не хватает. Библиотека Pandas превращает Python из обычного языка программирования в мощный инструмент для работы с данными, позволяя манипулировать таблицами так же легко, как строками текста. Если вы устали от бесконечных циклов и условий при обработке CSV-файлов, или просто хотите добавить в своё резюме навык, который заставит рекрутеров нажать "пригласить на собеседование" — пора познакомиться с Pandas. Эта библиотека стала стандартом де-факто для всех, кто работает с данными в Python, и в 2025 году её популярность только растёт. 🐼

Хотите быстро освоить не только Pandas, но и всю экосистему Python-разработки? Курс «Python-разработчик» с нуля от Skypro — это погружение в практический Python с первых дней обучения. Вы не только изучите Pandas для анализа данных, но и научитесь создавать полноценные веб-приложения, работать с API и базами данных. Курс построен на реальных проектах, которые сразу можно добавить в портфолио — именно то, что ценят работодатели в 2025 году.

Pandas в Python: первые шаги к анализу данных

Библиотека Pandas — это мощный инструмент для анализа данных, который превращает Python в настоящий комбайн для работы с таблицами, временными рядами и другими структурированными данными. По сути, Pandas — это Excel на стероидах, только вместо кликов мышкой здесь используется код, что делает любые операции повторяемыми и масштабируемыми. 📊

Почему Pandas стала стандартом в аналитике данных? Основные преимущества библиотеки:

  • Высокая скорость обработки больших объемов данных
  • Интеллектуальная обработка отсутствующих данных
  • Мощные функции группировки и агрегации
  • Встроенные инструменты для работы с временными рядами
  • Простая интеграция с другими библиотеками экосистемы Python (NumPy, Matplotlib, scikit-learn)

Алексей Петров, Data Scientist Помню свой первый проект с реальными данными. Мне нужно было проанализировать продажи интернет-магазина за три года — почти миллион строк с десятками параметров. Я начал писать чистый Python, создавая циклы для обработки CSV-файла... Спустя два часа кода и отладки я смог только загрузить и отфильтровать данные, но когда попытался сделать сводные таблицы — код превратился в спагетти. Тогда коллега показал мне, как сделать то же самое с Pandas. Загрузка, фильтрация, группировка и даже визуализация заняли буквально 15 строк кода. То, что раньше заняло бы неделю, теперь делалось за пару часов. С тех пор я не представляю аналитику без этой библиотеки.

Для эффективной работы с Pandas важно понимать её связь с экосистемой анализа данных в Python:

БиблиотекаНазначениеВзаимодействие с Pandas
NumPyМатематические операции с массивамиPandas построен на основе NumPy и использует его массивы
Matplotlib/SeabornВизуализация данныхИнтегрированы с Pandas для построения графиков
scikit-learnМашинное обучениеПринимает DataFrame для обучения моделей
SciPyНаучные вычисленияРасширенные статистические функции
StatsmodelsСтатистические моделиРаботает напрямую с объектами Pandas

Перед тем как перейти к практическим примерам, важно понимать, что Pandas лучше всего подходит для табличных данных среднего размера (до нескольких гигабайт). Для больших данных могут потребоваться специализированные инструменты вроде Dask или PySpark, хотя базовые принципы работы с Pandas применимы и там.

Кинга Идем в IT: пошаговый план для смены профессии

Установка и настройка библиотеки Pandas для работы

Установка Pandas в 2025 году стала ещё проще, чем раньше. Библиотека поддерживает все основные операционные системы и может быть установлена несколькими способами в зависимости от ваших предпочтений и существующей конфигурации Python. 🔧

Самый простой способ установки — использование менеджера пакетов pip:

pip install pandas

Для пользователей, предпочитающих conda (например, в дистрибутиве Anaconda):

conda install pandas

После установки важно убедиться, что всё работает корректно. Проверить версию библиотеки можно так:

Python
Скопировать код
import pandas as pd
print(pd.__version__)

На начало 2025 года стабильной версией является Pandas 2.2.x, которая включает значительные улучшения производительности и новые функции по сравнению с предыдущими выпусками.

Набор необходимых библиотек для полноценной работы с данными:

  • pandas — основная библиотека для работы с данными
  • numpy — для математических операций
  • matplotlib — для создания базовой визуализации
  • seaborn — для продвинутой визуализации
  • openpyxl — для работы с Excel-файлами (опционально)
  • sqlalchemy — для работы с базами данных (опционально)

Установка всего набора одной командой:

pip install pandas numpy matplotlib seaborn openpyxl sqlalchemy

Для удобства работы рекомендую настроить среду разработки. В 2025 году наиболее популярные варианты для работы с Pandas:

СредаПреимуществаОсобенности
Jupyter Notebook/LabИнтерактивность, визуализация в документеИдеален для исследовательского анализа
VS Code с расширением PythonМощный редактор, интеграция с GitПоддерживает Jupyter внутри IDE
PyCharmПродвинутая интеграция, отладкаПрофессиональная версия не бесплатна
Google ColabБесплатный доступ к GPUРаботает в браузере, не требует установки
Kaggle NotebooksПредустановленные библиотеки для MLИнтеграция с датасетами Kaggle

Для начинающих рекомендую Jupyter Notebook — он позволяет выполнять код по частям и сразу видеть результаты, что критически важно при изучении Pandas:

pip install jupyter
jupyter notebook

Хорошей практикой при работе с Pandas является установка стандартных импортов и настроек в начале каждого проекта:

Python
Скопировать код
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# Настройка отображения данных
pd.set_option('display.max_columns', None) # Показывать все столбцы
pd.set_option('display.max_rows', 100) # Ограничить количество строк
pd.set_option('display.width', 1000) # Ширина вывода
pd.set_option('display.precision', 2) # Округление чисел

# Настройка визуализации
sns.set(style="whitegrid") # Стиль графиков
plt.rcParams['figure.figsize'] = (12, 8) # Размер графиков по умолчанию

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

Основные структуры данных в Pandas: Series и DataFrame

Фундамент работы с Pandas составляют две основные структуры данных: Series (одномерный массив) и DataFrame (двумерная таблица). Понимание этих структур — ключ к мастерству в манипулировании данными. 🧠

Series — это одномерный маркированный массив, способный хранить данные любого типа. По сути, это столбец данных с индексами:

Python
Скопировать код
# Создание Series
import pandas as pd
import numpy as np

# Из списка
s = pd.Series([10, 20, 30, 40])
print(s)

# С заданными индексами
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

# Из словаря
s = pd.Series({'a': 10, 'b': 20, 'c': 30, 'd': 40})
print(s)

# Доступ к элементам
print(s['a']) # По индексу
print(s[0]) # По позиции
print(s[['a', 'c']]) # Несколько элементов

DataFrame — это двумерная таблица данных с подписанными строками и столбцами. Его можно представить как набор Series, имеющих общий индекс:

Python
Скопировать код
# Создание DataFrame
# Из словаря
data = {
'Имя': ['Анна', 'Борис', 'Вера', 'Глеб'],
'Возраст': [25, 30, 22, 35],
'Город': ['Москва', 'Санкт-Петербург', 'Казань', 'Москва']
}
df = pd.DataFrame(data)
print(df)

# Из списка словарей
data = [
{'Имя': 'Анна', 'Возраст': 25, 'Город': 'Москва'},
{'Имя': 'Борис', 'Возраст': 30, 'Город': 'Санкт-Петербург'},
{'Имя': 'Вера', 'Возраст': 22, 'Город': 'Казань'},
{'Имя': 'Глеб', 'Возраст': 35, 'Город': 'Москва'}
]
df = pd.DataFrame(data)
print(df)

# Из массива NumPy
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(arr, columns=['A', 'B', 'C'])
print(df)

Мария Соколова, Python-тренер Когда я веду курсы по Python для аналитиков, самый большой "вау-эффект" у студентов вызывает переход от циклов к векторизованным операциям Pandas. Однажды ко мне пришёл студент, который неделю писал скрипт для обработки данных о продажах. Его код содержал десятки вложенных циклов и условий, работал медленно и содержал много ошибок. Мы переписали его решение, используя DataFrame и векторизованные операции. Вместо 300 строк кода получилось 20, скорость выполнения увеличилась в 50 раз, а главное — код стал понятным. Студент был в шоке: "Почему я раньше этого не знал?". Именно тогда я поняла, насколько важно правильно объяснять структуры данных Pandas с самого начала.

Индексация и выборка данных — это основа эффективной работы с DataFrame:

Python
Скопировать код
# Выбор столбцов
print(df['Имя']) # Один столбец (вернет Series)
print(df[['Имя', 'Возраст']]) # Несколько столбцов (вернет DataFrame)

# Выбор строк по позиции
print(df.iloc[0]) # Первая строка (вернет Series)
print(df.iloc[0:2]) # Первые две строки (вернет DataFrame)
print(df.iloc[0:2, 0:2]) # Подмножество строк и столбцов

# Выбор строк по индексу
df = df.set_index('Имя') # Установка столбца 'Имя' в качестве индекса
print(df.loc['Анна']) # Строка с индексом 'Анна'
print(df.loc[['Анна', 'Вера']]) # Несколько строк по индексам

# Условная выборка
print(df[df['Возраст'] > 25]) # Строки, где возраст больше 25
print(df[(df['Возраст'] > 25) & (df['Город'] == 'Москва')]) # Комбинирование условий

Важно понимать разницу между основными методами выборки данных:

  • df[column] — выбор столбца по имени
  • df[[col1, col2]] — выбор нескольких столбцов
  • df.loc[index, column] — выбор по метке индекса и столбца
  • df.iloc[position, position] — выбор по позиции (как в обычном списке)
  • df.query('условие') — выбор строк, соответствующих условию (более читаемый синтаксис)

Манипуляции с DataFrame включают множество полезных операций:

Python
Скопировать код
# Добавление столбца
df['Статус'] = ['Активен', 'Неактивен', 'Активен', 'Неактивен']
print(df)

# Добавление строки
df.loc['Дмитрий'] = [28, 'Новосибирск', 'Активен']
print(df)

# Удаление столбца
df = df.drop('Статус', axis=1) # axis=1 для столбцов
print(df)

# Удаление строк
df = df.drop(['Анна', 'Вера'], axis=0) # axis=0 для строк
print(df)

# Переименование столбцов
df = df.rename(columns={'Возраст': 'Age', 'Город': 'City'})
print(df)

# Сброс индекса
df = df.reset_index() # Преобразует индекс в столбец
print(df)

Эффективное использование Series и DataFrame трансформирует процесс анализа данных, делая его более интуитивным и продуктивным. Освоив эти базовые структуры, вы заложите фундамент для более сложных операций с данными.

Загрузка и обработка данных с помощью Pandas

Реальная сила Pandas раскрывается при работе с внешними данными. Библиотека предлагает множество функций для загрузки данных из различных источников и их предварительной обработки. 📂

Начнем с загрузки данных из различных источников:

Python
Скопировать код
# Загрузка из CSV
df = pd.read_csv('data.csv')

# Загрузка из Excel
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# Загрузка из JSON
df = pd.read_json('data.json')

# Загрузка из SQL
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
df = pd.read_sql('SELECT * FROM table', engine)

# Загрузка из веб (HTML-таблица)
df = pd.read_html('https://example.com/table.html')[0]

# Загрузка из файла с разделителями
df = pd.read_csv('data.txt', sep='\t') # Табуляция как разделитель

Функция read_csv() имеет множество полезных параметров для настройки импорта:

Python
Скопировать код
# Расширенные параметры загрузки CSV
df = pd.read_csv('data.csv', 
sep=',', # Разделитель 
header=0, # Номер строки с заголовками
index_col='ID', # Столбец для использования как индекс
usecols=['ID', 'Name', 'Value'], # Только указанные столбцы
dtype={'Value': float}, # Задание типа данных
parse_dates=['Date'], # Преобразование строк в даты
nrows=1000, # Только первые 1000 строк
skiprows=[1, 3], # Пропустить строки 1 и 3
na_values=['NA', 'N/A', '?'] # Значения для обработки как NaN
)

После загрузки данных первым шагом должно быть их исследование:

Python
Скопировать код
# Базовый анализ данных
print(df.head()) # Первые 5 строк
print(df.tail()) # Последние 5 строк
print(df.info()) # Информация о DataFrame (типы, память)
print(df.describe()) # Статистика по числовым столбцам
print(df.shape) # Размерность (строки, столбцы)
print(df.columns) # Имена столбцов
print(df.dtypes) # Типы данных по столбцам
print(df.isna().sum()) # Количество пропущенных значений

Очистка и предобработка данных — критически важный этап анализа:

  1. Обработка пропущенных значений:
Python
Скопировать код
# Удаление строк с пропущенными значениями
df_clean = df.dropna() # По умолчанию удаляет строку, если есть хотя бы один NaN
df_clean = df.dropna(subset=['важный_столбец']) # Удаление только если NaN в указанном столбце

# Заполнение пропущенных значений
df['столбец'].fillna(0, inplace=True) # Заполнение нулями
df['столбец'].fillna(df['столбец'].mean(), inplace=True) # Заполнение средним
df['столбец'].fillna(method='ffill', inplace=True) # Заполнение предыдущим значением
df['столбец'].fillna(method='bfill', inplace=True) # Заполнение следующим значением

# Интерполяция
df['столбец'].interpolate(method='linear', inplace=True) # Линейная интерполяция
  1. Обработка дубликатов:
Python
Скопировать код
# Поиск дубликатов
duplicates = df.duplicated() # Серия булевых значений
print(df[duplicates]) # Показать только дубликаты

# Удаление дубликатов
df.drop_duplicates(inplace=True) # Удаление полных дубликатов
df.drop_duplicates(subset=['столбец1', 'столбец2'], inplace=True) # По конкретным столбцам
df.drop_duplicates(keep='last', inplace=True) # Оставить последний дубликат
  1. Преобразование типов данных:
Python
Скопировать код
# Преобразование типов
df['число'] = df['число'].astype('int64') # В целое число
df['флаг'] = df['флаг'].astype('bool') # В булево значение
df['дата'] = pd.to_datetime(df['дата']) # В дату/время
df['категория'] = df['категория'].astype('category') # В категориальные данные
  1. Фильтрация выбросов:
Python
Скопировать код
# Метод Z-score
from scipy import stats
z_scores = stats.zscore(df['числовой_столбец'])
df_no_outliers = df[abs(z_scores) < 3] # Удаление выбросов (|z| > 3)

# Метод IQR (межквартильный размах)
Q1 = df['числовой_столбец'].quantile(0.25)
Q3 = df['числовой_столбец'].quantile(0.75)
IQR = Q3 – Q1
df_no_outliers = df[~((df['числовой_столбец'] < (Q1 – 1.5 * IQR)) | 
(df['числовой_столбец'] > (Q3 + 1.5 * IQR))]

Трансформация и извлечение признаков — важные этапы для подготовки данных к анализу:

Python
Скопировать код
# Создание новых столбцов на основе существующих
df['полное_имя'] = df['имя'] + ' ' + df['фамилия']
df['возрастная_группа'] = pd.cut(df['возраст'], bins=[0, 18, 30, 50, 100], 
labels=['Ребенок', 'Молодой', 'Средний', 'Пожилой'])

# Извлечение компонентов даты
df['год'] = df['дата'].dt.year
df['месяц'] = df['дата'].dt.month
df['день_недели'] = df['дата'].dt.day_name()

# One-hot кодирование категориальных переменных
df_encoded = pd.get_dummies(df, columns=['категория'], drop_first=True)

# Нормализация числовых данных
df['normalized'] = (df['число'] – df['число'].min()) / (df['число'].max() – df['число'].min())

Объединение и преобразование данных из различных источников:

ОперацияОписаниеПример использования
mergeОбъединение по ключам (как JOIN в SQL)pd.merge(df1, df2, on='key', how='inner')
concatОбъединение по оси (строки или столбцы)pd.concat([df1, df2], axis=0)
joinОбъединение по индексуdf1.join(df2, how='left')
pivotПеревод из длинной формы в широкуюdf.pivot(index='id', columns='category', values='value')
meltПеревод из широкой формы в длиннуюpd.melt(df, id_vars=['id'], value_vars=['val1', 'val2'])

Сохранение обработанных данных:

Python
Скопировать код
# Сохранение в различные форматы
df.to_csv('processed_data.csv', index=False)
df.to_excel('processed_data.xlsx', sheet_name='Sheet1')
df.to_json('processed_data.json', orient='records')
df.to_sql('table_name', engine, if_exists='replace')
df.to_pickle('processed_data.pkl') # Быстрое сохранение для Python

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

Не уверены в своих способностях к аналитике данных или программированию? Пройдите Тест на профориентацию от Skypro, который поможет определить, подходит ли вам карьера в Data Science или Python-разработке. Тест анализирует ваши склонности к логическому мышлению, работе с информацией и программированию — ключевые навыки для эффективного использования Pandas. Получите персональные рекомендации о карьерном пути и необходимых навыках прямо сейчас!

Визуализация и анализ информации через Pandas в Python

Как говорится, "один график стоит тысячи таблиц". Pandas предоставляет встроенные инструменты визуализации, интегрированные с matplotlib, что делает создание информативных графиков на основе ваших данных невероятно простым. 📈

Базовые графики можно создавать прямо из DataFrame, без дополнительного импорта библиотек:

Python
Скопировать код
# Создадим DataFrame с данными о выручке по месяцам
data = {
'Месяц': ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн'],
'Выручка': [120, 150, 140, 180, 210, 230],
'Затраты': [90, 100, 95, 120, 130, 140],
'Клиенты': [50, 55, 60, 65, 70, 75]
}
df = pd.DataFrame(data)

# Линейный график
df.plot(x='Месяц', y=['Выручка', 'Затраты'], figsize=(10, 6), title='Динамика показателей')

# Столбчатая диаграмма
df.plot.bar(x='Месяц', y=['Выручка', 'Затраты'], figsize=(10, 6))

# Горизонтальная столбчатая диаграмма
df.plot.barh(x='Месяц', y='Выручка')

# Круговая диаграмма
df.plot.pie(y='Выручка', figsize=(10, 10), labels=df['Месяц'], autopct='%1.1f%%')

# Диаграмма рассеяния (scatter plot)
df.plot.scatter(x='Клиенты', y='Выручка', s=df['Затраты'], alpha=0.5) 

# Гистограмма
df['Выручка'].plot.hist(bins=10)

# Ящик с усами (boxplot)
df.plot.box()

# Диаграмма плотности (density plot)
df[['Выручка', 'Затраты']].plot.density()

Для более продвинутой визуализации стоит воспользоваться Seaborn, который отлично интегрируется с Pandas:

Python
Скопировать код
import seaborn as sns
import matplotlib.pyplot as plt

# Тепловая карта корреляций
correlation = df.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Матрица корреляции')

# Парные графики
sns.pairplot(df.select_dtypes(include=['number']))

# Диаграмма совместного распределения
sns.jointplot(x='Клиенты', y='Выручка', data=df, kind='hex')

# Кластерная гистограмма
plt.figure(figsize=(12, 8))
sns.histplot(data=df, x='Выручка', hue='Месяц', bins=20, kde=True)

# Категориальный график
plt.figure(figsize=(12, 8))
sns.catplot(x='Месяц', y='Выручка', data=df, kind='violin')

Анализ данных в Pandas выходит за рамки простой визуализации. Библиотека предлагает мощные инструменты для статистического анализа:

Python
Скопировать код
# Базовая статистика
print(df.describe()) # Основные статистические показатели
print(df['Выручка'].mean()) # Среднее значение
print(df['Выручка'].median()) # Медиана
print(df['Выручка'].mode()) # Мода
print(df['Выручка'].std()) # Стандартное отклонение
print(df['Выручка'].var()) # Дисперсия
print(df['Выручка'].skew()) # Асимметрия
print(df['Выручка'].kurt()) # Эксцесс

# Корреляционный анализ
print(df.corr(method='pearson')) # Коэффициент корреляции Пирсона
print(df.corr(method='spearman')) # Коэффициент ранговой корреляции Спирмена

# Анализ категориальных данных
print(df['Месяц'].value_counts()) # Частота каждого значения
print(df['Месяц'].value_counts(normalize=True)) # В процентах

# Кросс-табуляция (аналог сводной таблицы)
pd.crosstab(df['Месяц'], df['Выручка'] > df['Выручка'].mean(), 
rownames=['Месяц'], colnames=['Выручка выше среднего'])

Группировка и агрегация данных — одна из сильнейших сторон Pandas:

Python
Скопировать код
# Простая группировка и агрегация
df.groupby('Месяц')['Выручка'].sum() # Сумма выручки по месяцам
df.groupby('Месяц')['Выручка', 'Затраты'].mean() # Среднее по нескольким столбцам

# Множественные агрегации
df.groupby('Месяц').agg({
'Выручка': ['sum', 'mean', 'std'], # Различные агрегации для разных столбцов
'Затраты': ['sum', 'min', 'max'],
'Клиенты': 'count'
})

# Трансформация групп
df['центрированная_выручка'] = df.groupby('Месяц')['Выручка'].transform(
lambda x: x – x.mean() # Центрирование выручки в каждой группе
)

# Оконные функции (скользящие и расширяющиеся агрегации)
df['скользящее_среднее'] = df['Выручка'].rolling(window=3).mean()
df['кумулятивная_сумма'] = df['Выручка'].expanding().sum()
df['ранг'] = df['Выручка'].rank(method='dense') # Ранжирование

Временные ряды — особая сила Pandas:

Python
Скопировать код
# Создание временного ряда
dates = pd.date_range(start='2025-01-01', periods=100, freq='D')
ts = pd.Series(np.random.randn(100).cumsum(), index=dates)

# Изменение частоты временного ряда
ts_monthly = ts.resample('M').mean() # Ресемплинг на месячные данные
ts_weekly = ts.resample('W').sum() # Ресемплинг на недельные данные

# Скользящее среднее и другие агрегации по времени
ts.rolling('30D').mean() # Скользящее среднее за 30 дней

# Сдвиг данных
ts_shifted = ts.shift(periods=7) # Сдвиг на 7 дней вперед
ts_lagged = ts.shift(periods=-7) # Сдвиг на 7 дней назад (лаг)

# Вычисление изменений
ts_diff = ts.diff() # Разница между текущим и предыдущим значением
ts_pct_change = ts.pct_change() * 100 # Процентное изменение

# Сезонная декомпозиция
from statsmodels.tsa.seasonal import seasonal_decompose
decomposition = seasonal_decompose(ts, model='additive', period=30) 
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid

# Визуализация компонентов временного ряда
fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, figsize=(12, 16))
ts.plot(ax=ax1)
ax1.set_title('Оригинальный временной ряд')
trend.plot(ax=ax2)
ax2.set_title('Тренд')
seasonal.plot(ax=ax3)
ax3.set_title('Сезонность')
residual.plot(ax=ax4)
ax4.set_title('Остатки')

Pandas также предлагает инструменты для расширенного анализа и сводных таблиц:

Python
Скопировать код
# Сводная таблица (Pivot Table)
pivot = df.pivot_table(
values=['Выручка', 'Затраты'],
index='Месяц',
aggfunc={'Выручка': ['sum', 'mean'], 'Затраты': ['sum', 'mean']}
)
print(pivot)

# Таблица с перекрестной группировкой
cross_tab = pd.crosstab(
[df['Месяц']], 
[df['Выручка'] > df['Выручка'].mean()],
values=df['Клиенты'],
aggfunc=['mean', 'sum']
)
print(cross_tab)

Интеграция с машинным обучением также проста благодаря совместимости с библиотеками, такими как scikit-learn:

Python
Скопировать код
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Подготовка данных
X = df[['Клиенты', 'Затраты']]
y = df['Выручка']

# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Обучение модели
model = LinearRegression()
model.fit(X_train, y_train)

# Предсказания
predictions = model.predict(X_test)

# Добавление предсказаний в DataFrame
test_results = pd.DataFrame({
'Фактическая_выручка': y_test,
'Прогнозируемая_выручка': predictions,
'Разница': y_test – predictions
})
print(test_results)

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

Научиться интерпретировать данные через графики и статистический анализ — это как научиться читать новый визуальный язык. Сначала все графики кажутся непонятными, но после правильного освоения Pandas они начинают говорить больше, чем тысячи строк цифр. Ваши отчёты и презентации становятся нагляднее, а принимаемые решения — обоснованнее. Именно эта комбинация навыков анализа, визуализации и программирования делает специалистов по данным настолько ценными на рынке труда в 2025 году и, похоже, останется востребованной ещё долгие годы.