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

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

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

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

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

    Библиотека Pandas изменила правила игры в анализе данных, превратив утомительные задачи манипуляции с таблицами в элегантные однострочные операции. Эта мощная Python-библиотека стала незаменимым инструментом для каждого, кто работает с данными — от начинающих аналитиков до опытных data scientists. В 2025 году владение Pandas — это не просто навык, а обязательное требование рынка труда в сфере аналитики. Погрузимся в мир высокопроизводительных структур данных и функций, которые превращают сырые числа в ценные инсайты. 🐼

Хотите перейти от простого интереса к данным к профессиональному владению инструментами аналитики? Курс «Аналитик данных» с нуля от Skypro — ваш билет в мир больших возможностей. Здесь вы не просто изучите Pandas, но освоите полный стек технологий для работы с данными под руководством практикующих экспертов. Наши выпускники становятся востребованными специалистами с первого месяца обучения. Инвестируйте в навыки, которые действительно окупаются!

Pandas: Что такое библиотека и зачем она нужна аналитику

Pandas — это высокоуровневая библиотека для языка программирования Python, специализирующаяся на обработке и анализе структурированных данных. Название происходит от термина "panel data" (панельные данные), что отражает её изначальное предназначение для работы с экономическими временными рядами.

Основанная Уэсом МакКинни в 2008 году, библиотека продолжает активно развиваться, и к 2025 году стала де-факто стандартом для манипуляций с данными в экосистеме Python. Фактически, Pandas делает для анализа данных то же, что Excel для офисных работников, но с гораздо большей мощностью и гибкостью.

Александр Петров, Chief Data Analyst

В 2022 году я работал над проектом анализа клиентской базы крупного ритейлера. Нам предоставили 15 гигабайт разрозненных данных из разных источников — от Excel-таблиц до SQL-дампов. Первая задача — консолидировать всё это в единый источник для анализа.

Коллега предложил использовать CSV-файлы и Python с циклами для обработки. Это заняло бы недели. Я предложил Pandas. Мы загрузили данные, стандартизировали форматы с помощью методов .astype() и .apply(), объединили таблицы через .merge() и очистили дубликаты с .drop_duplicates().

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

Ключевые преимущества Pandas для аналитика данных:

  • Унифицированный интерфейс — единый подход к работе с различными типами данных (CSV, Excel, SQL, JSON и другие)
  • Высокая производительность — оптимизированные алгоритмы для обработки больших объёмов данных
  • Интеграция с экосистемой — бесшовная работа с другими библиотеками Python (NumPy, Matplotlib, Scikit-learn)
  • Гибкость манипуляций — эффективные методы для трансформации, фильтрации и агрегации данных
  • Встроенные инструменты анализа — статистические функции и визуализация без дополнительных зависимостей

Сравним Pandas с другими инструментами для анализа данных:

ИнструментПреимуществаНедостаткиИдеален для
Pandas (Python)Гибкость, обширная экосистема, мощные функции манипуляции даннымиТребует знания программированияУниверсальные задачи анализа данных
ExcelНизкий порог входа, визуальный интерфейсОграничения по объему данных, сложность автоматизацииПростые задачи, небольшие наборы данных
R (dplyr/tidyverse)Специализированный для статистикиМенее универсальный за пределами статистического анализаСтатистический анализ и исследования
SQLОптимизирован для работы с базами данныхОграниченная функциональность для аналитикиЗапросы к структурированным базам данных

В отличие от Excel, Pandas справляется с миллионами строк данных, а в отличие от SQL, предлагает богатый инструментарий для статистического анализа и визуализации. Это делает библиотеку универсальным решением для аналитиков, стремящихся автоматизировать рутинные задачи и сосредоточиться на глубоком анализе. 📊

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

Структуры данных в Pandas: DataFrame и Series

Сила Pandas заключается в двух ключевых структурах данных — Series и DataFrame. Они образуют фундамент всей библиотеки и предоставляют интуитивный способ представления и манипулирования данными различных типов и размерностей.

Series: одномерный массив с метками

Series — это одномерная маркированная структура данных, способная хранить любой тип данных (целые числа, строки, числа с плавающей точкой, объекты Python и т.д.). Концептуально Series можно представить как столбец в таблице или специализированный словарь Python.

Создание Series в Pandas:

Python
Скопировать код
import pandas as pd

# Создание из списка
s = pd.Series([1, 3, 5, 7, 9])

# Создание с пользовательскими индексами
s2 = pd.Series([1\.5, 2.5, 3.5], index=['a', 'b', 'c'])

# Создание из словаря
s3 = pd.Series({'Москва': 12.6, 'Санкт-Петербург': 5.4, 'Казань': 1.3})

Основные характеристики Series:

  • Неизменный размер (как и NumPy ndarray)
  • Гомогенные данные (все элементы одного типа)
  • Поддержка явных и неявных (целочисленных) индексов
  • Векторизованные операции (быстрые математические вычисления)
  • Автоматическая обработка отсутствующих значений (NaN)

DataFrame: двумерная таблица данных

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

Создание DataFrame в Pandas:

Python
Скопировать код
import pandas as pd

# Создание из словаря списков
data = {
'Город': ['Москва', 'Санкт-Петербург', 'Новосибирск', 'Екатеринбург'],
'Население': [12\.6, 5.4, 1.6, 1.5],
'Площадь': [2561, 1439, 502, 468]
}
df = pd.DataFrame(data)

# Создание из списка словарей
data_records = [
{'name': 'Алексей', 'age': 28, 'city': 'Москва'},
{'name': 'Елена', 'age': 24, 'city': 'Казань'},
{'name': 'Михаил', 'age': 32, 'city': 'Сочи'}
]
df2 = pd.DataFrame(data_records)

# Создание из файла
df3 = pd.read_csv('data.csv')
df4 = pd.read_excel('data.xlsx')

Сравнение характеристик Series и DataFrame:

ХарактеристикаSeriesDataFrame
Размерность1D (одномерный)2D (двумерный)
Доступ к даннымПо индексам (метки или целые числа)По строкам и столбцам (метки или целые числа)
Однородность данныхГомогенный (один тип)Гетерогенный (разные типы в разных столбцах)
Представление в памятиОдномерный массив NumPy с меткамиКоллекция Series, имеющих общий индекс
Типичное применениеВременной ряд, вектор признаковРеляционные данные, матрица признаков

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

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

Основные функции Pandas для манипуляций с данными

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

Загрузка и экспорт данных

Pandas предлагает универсальный интерфейс для работы с различными форматами данных:

Python
Скопировать код
# Импорт данных
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
df = pd.read_json('data.json')
df = pd.read_sql('SELECT * FROM table', connection)

# Экспорт данных
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx')
df.to_json('output.json')
df.to_sql('new_table', connection)

Выборка и фильтрация данных

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

  • Выбор по меткеdf.loc['label'] или df.loc['label1':'label2', ['A', 'B']]
  • Выбор по позицииdf.iloc[0] или df.iloc[0:5, 0:2]
  • Булева индексацияdf[df['column'] > value]
  • Случайная выборкаdf.sample(n=5) или df.sample(frac=0.1)
Python
Скопировать код
# Выборка по метке
row = df.loc['2023-01-01']
subset = df.loc['2023-01-01':'2023-01-31', ['Revenue', 'Expenses']]

# Выборка по позиции
first_row = df.iloc[0]
first_five_rows_two_cols = df.iloc[0:5, 0:2]

# Фильтрация с условиями
high_revenue = df[df['Revenue'] > 1000000]
specific_cities = df[df['City'].isin(['Москва', 'Санкт-Петербург'])]

# Сложные условия
complex_filter = df[(df['Revenue'] > 1000000) & (df['Profit'] > 100000)]

Трансформация и очистка данных

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

Python
Скопировать код
# Обработка пропущенных значений
df.dropna() # Удаление строк с NaN
df.fillna(0) # Заполнение NaN нулями
df['Column'].fillna(df['Column'].mean()) # Заполнение средним значением

# Удаление дубликатов
df.drop_duplicates()
df.drop_duplicates(subset=['Column1', 'Column2'])

# Преобразование типов данных
df['Revenue'] = df['Revenue'].astype(float)
df['Date'] = pd.to_datetime(df['Date'])

# Применение функций
df['Revenue_k'] = df['Revenue'].apply(lambda x: x/1000)
df['Full_Name'] = df.apply(lambda row: f"{row['First_Name']} {row['Last_Name']}", axis=1)

Марина Соколова, Data Science Lead

Недавно мой отдел работал над прогнозной моделью оттока клиентов для телекоммуникационной компании. Данные поступали из 6 различных систем, включая CRM, биллинг и технические логи. Очистка и подготовка данных могли занять недели.

Мы применили конвейер обработки на Pandas. Сначала стандартизировали формат дат через pd.to_datetime(), затем создали агрегаты для клиентских метрик с groupby(). Самым сложным был анализ сетевых ошибок — временные ряды с пропусками и выбросами.

Функция .resample() помогла привести все к одинаковой частоте, а .rolling() создал скользящие окна для обнаружения аномалий. Благодаря методу .merge() с параметром how='outer' мы объединили все источники без потери данных.

Весь процесс занял 3 дня вместо планируемых 2 недель. Модель, построенная на подготовленных данных, показала точность 87%, что превзошло ожидания клиента на 15%. С тех пор в каждый проект мы включаем отдельный этап разработки конвейера обработки на Pandas.

Группировка и агрегация

Одна из самых мощных возможностей Pandas — группировка данных для последующего анализа:

Python
Скопировать код
# Группировка по одному столбцу
by_city = df.groupby('City')
by_city['Revenue'].sum()

# Группировка по нескольким столбцам
by_city_date = df.groupby(['City', 'Date'])
by_city_date.agg({'Revenue': 'sum', 'Customers': 'count'})

# Сложные агрегации
aggregations = df.groupby('Category').agg({
'Revenue': ['sum', 'mean', 'std'],
'Profit': ['sum', 'mean', 'max'],
'Customers': 'count'
})

Соединение и объединение данных

Pandas предлагает SQL-подобные операции для работы с несколькими наборами данных:

Python
Скопировать код
# Объединение по столбцам (аналог SQL JOIN)
merged = pd.merge(df1, df2, on='ID')
merged = pd.merge(df1, df2, left_on='df1_ID', right_on='df2_ID')

# Различные типы объединений
inner_join = pd.merge(df1, df2, on='ID', how='inner')
left_join = pd.merge(df1, df2, on='ID', how='left')
outer_join = pd.merge(df1, df2, on='ID', how='outer')

# Конкатенация (аналог UNION в SQL)
concatenated = pd.concat([df1, df2])
concatenated_cols = pd.concat([df1, df2], axis=1)

Освоив эти базовые функции, вы сможете эффективно трансформировать и анализировать данные любой сложности. Комбинация этих методов позволяет создавать мощные конвейеры обработки данных, значительно сокращая время от получения данных до готовых аналитических выводов. 🔧

Не уверены, подходит ли вам карьера аналитика данных? Пройдите Тест на профориентацию от Skypro и узнайте, насколько ваши склонности и таланты соответствуют требованиям профессии. Тест разработан опытными карьерными консультантами с учетом актуальных требований рынка труда. Всего 5 минут могут определить ваше профессиональное будущее и подсказать оптимальный путь развития в мире данных и аналитики!

Визуализация и статистический анализ в Pandas

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

Описательная статистика

Pandas позволяет одной командой получить ключевые статистические показатели для числовых данных:

Python
Скопировать код
# Основные статистические показатели
df.describe()

# Специфические метрики
df['Revenue'].mean() # Среднее
df['Revenue'].median() # Медиана
df['Revenue'].std() # Стандартное отклонение
df['Revenue'].min() # Минимум
df['Revenue'].max() # Максимум
df['Revenue'].quantile(0.75) # 75-й перцентиль

# Корреляция и ковариация
df[['Revenue', 'Expenses', 'Profit']].corr()
df[['Revenue', 'Expenses']].cov()

# Группировка с последующей статистикой
df.groupby('Category')['Revenue'].describe()

Метод .describe() автоматически адаптируется к типу данных в столбцах:

  • Для числовых данных: count, mean, std, min, 25%, 50%, 75%, max
  • Для объектных данных: count, unique, top, freq
  • Для временных данных: count, unique, top, freq, first, last

Встроенная визуализация

Pandas имеет интегрированную с Matplotlib систему визуализации, позволяющую создавать графики одной командой:

Python
Скопировать код
# Линейный график
df['Revenue'].plot(figsize=(10, 6), title='Динамика выручки')

# Гистограмма
df['Revenue'].plot.hist(bins=20)

# Ящик с усами (боксплот)
df.boxplot(column='Revenue', by='Category')

# Круговая диаграмма
df.groupby('Category')['Revenue'].sum().plot.pie()

# Диаграмма рассеяния
df.plot.scatter(x='Expenses', y='Revenue')

# График с несколькими рядами
df[['Revenue', 'Expenses', 'Profit']].plot()

# Сводная таблица с тепловой картой
pivot_table = df.pivot_table(
values='Revenue', 
index='Month', 
columns='Category', 
aggfunc='sum'
)
pivot_table.plot.heatmap()

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

  • Matplotlib — базовая библиотека визуализации с высокой степенью настройки
  • Seaborn — надстройка над Matplotlib с улучшенной эстетикой и высокоуровневыми функциями
  • Plotly — интерактивные визуализации для web и дашбордов

Анализ временных рядов

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

Python
Скопировать код
# Преобразование столбца в datetime
df['Date'] = pd.to_datetime(df['Date'])

# Установка индекса времени
df = df.set_index('Date')

# Ресэмплинг (изменение частоты данных)
monthly = df.resample('M').sum() # Месячные суммы
weekly = df.resample('W').mean() # Недельные средние

# Скользящее окно (rolling window)
df['Rolling_Avg'] = df['Revenue'].rolling(window=7).mean()

# Смещение (сдвиг) данных
df['Revenue_Previous_Day'] = df['Revenue'].shift(1)
df['Revenue_Next_Day'] = df['Revenue'].shift(-1)

# Процентное изменение
df['Revenue_Change'] = df['Revenue'].pct_change() * 100

Сравнение статистических функций различных библиотек:

ФункцияPandasNumPySciPy
Среднее значениеdf.mean() или df['col'].mean()np.mean(array)scipy.stats.tmean()
Медианаdf.median()np.median(array)scipy.stats.median()
Стандартное отклонениеdf.std()np.std(array)scipy.stats.tstd()
Корреляцияdf.corr()np.corrcoef(x, y)scipy.stats.pearsonr()
Квантилиdf.quantile([0\.25, 0.75])np.quantile(array, [0\.25, 0.75])scipy.stats.scoreatpercentile()
Обработка пропущенных значенийАвтоматическая (skipna=True)Необходима ручная обработкаНеобходима ручная обработка

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

Оптимизация работы с Pandas для больших объемов данных

С ростом объема данных становится критично важным оптимизировать использование Pandas. Библиотека обладает высокой эффективностью, но неоптимальное использование может привести к проблемам производительности и памяти при работе с действительно большими наборами данных.

Эффективное использование памяти

Pandas загружает все данные в оперативную память, поэтому оптимизация памяти критична:

Python
Скопировать код
# Проверка использования памяти
df.info(memory_usage='deep')

# Оптимизация типов данных
df_optimized = df.copy()
df_optimized['integer_col'] = df_optimized['integer_col'].astype('int32')
df_optimized['float_col'] = df_optimized['float_col'].astype('float32')
df_optimized['category_col'] = df_optimized['category_col'].astype('category')

# До и после оптимизации
print(f"Before: {df.memory_usage(deep=True).sum() / 1024**2:.2f} MB")
print(f"After: {df_optimized.memory_usage(deep=True).sum() / 1024**2:.2f} MB")

# Использование категориальных данных для строковых столбцов с повторяющимися значениями
df['string_col'] = df['string_col'].astype('category')

# Удаление ненужных объектов для освобождения памяти
import gc
del large_unused_df
gc.collect()

Ускорение вычислений

Методы повышения производительности работы с Pandas:

  • Векторизация вместо циклов Python
  • Методы cython для вычислительно-интенсивных операций
  • Предварительная фильтрация данных перед операциями
  • Использование оптимизированных методов доступа к данным
Python
Скопировать код
# Медленно (цикл Python)
for i in range(len(df)):
df.loc[i, 'new_col'] = df.loc[i, 'col1'] * df.loc[i, 'col2']

# Быстро (векторизация)
df['new_col'] = df['col1'] * df['col2']

# Использование встроенных методов вместо apply, где возможно
# Медленно
df['length'] = df['string_col'].apply(len)
# Быстро
df['length'] = df['string_col'].str.len()

# Предварительная фильтрация перед операциями
subset = df[df['category'] == 'target_category']
result = subset.groupby('other_col').mean()

Работа с данными, не помещающимися в память

Когда данные слишком велики для оперативной памяти, необходимы специальные подходы:

Python
Скопировать код
# Чтение файла порциями
chunk_size = 100000
chunks = []
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# Обрабатываем каждую порцию
processed_chunk = process_function(chunk)
chunks.append(processed_chunk)
# Объединяем результаты
result = pd.concat(chunks)

# Альтернативный вариант с обработкой на лету
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
# Выполняем вычисления без сохранения всех порций
update_results_with_chunk(chunk)

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

  • Dask — параллельные вычисления с Pandas-подобным API
  • Vaex — обработка табличных данных до ~1 TB объема
  • Modin — ускорение Pandas через параллелизацию без изменения кода
  • PySpark — распределенная обработка данных на кластерах

Сравнение производительности различных подходов:

ОперацияСтандартный подходОптимизированный подходПрирост скорости
Чтение CSV (100 MB)pd.read_csv('file.csv')pd.read_csv('file.csv', usecols=['нужные столбцы'])2-5x
Строковые операцииdf['col'].apply(str.upper)df['col'].str.upper()5-10x
Группировкаdf.groupby('category').apply(func)df.groupby('category').agg({'col': 'func'})3-8x
Итерация по строкамfor i, row in df.iterrows(): ...df['col1'] * df['col2']100-1000x
Фильтрация + операцияdf[df['col'] > 0].sum()df.loc[df['col'] > 0, 'col'].sum()1.5-3x

Придерживаясь этих практик, вы сможете эффективно работать с Pandas даже при больших объемах данных. Правильный выбор структур данных, типов и методов доступа может дать прирост производительности в десятки и сотни раз без необходимости переписывать код на низкоуровневые языки. ⚡

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