Python для Data Science: как работают Pandas и NumPy
окт, 13 2026
Представьте, что вам нужно проанализировать таблицу с миллионами строк продаж за прошлый год. В Excel файл зависнет намертво, а в SQL вы будете писать запросы полдня. Именно здесь в игру вступает Python - язык программирования, который стал стандартом де-факто в науке о данных (Data Science). Но сам по себе Python - это просто конструктор. Чтобы строить мощные аналитические модели, нужны специфические инструменты. Два главных кита этой индустрии - библиотеки NumPy и Pandas.
Если вы только начинаете путь в аналитике или хотите понять, почему эти две библиотеки упоминаются в каждой вакансии data scientist'а, эта статья для вас. Мы разберем не абстрактную теорию, а то, как именно эти инструменты экономят время и нервы при работе с реальными данными.
Кратко о главном
- NumPy - это фундамент. Он работает с числами и массивами максимально быстро, используя оптимизации уровня C.
- Pandas - это надстройка над NumPy для работы с табличными данными. Она добавляет удобство: имена столбцов, обработку пропусков и готовые функции для агрегации.
- Связь: Вы не можете эффективно использовать Pandas без понимания того, как под капотом работает NumPy.
- Когда выбирать что: Для чистых математических вычислений и линейной алгебры берите NumPy. Для анализа бизнес-метрик, дат и категориальных переменных - Pandas.
Почему обычный список в Python не подходит для науки о данных
Давайте начнем с проблемы. Допустим, у вас есть список цен на товары: `[100, 200, 300]`. В стандартном Python это объект типа `list`. Если вы захотите умножить каждую цену на коэффициент инфляции, например, 1.05, вам придется написать цикл:
prices = [100, 200, 300]
inflated_prices = []
for price in prices:
inflated_prices.append(price * 1.05)
Это медленно. При миллионе элементов такой цикл будет выполняться секунды, а не наносекунды. Кроме того, списки в Python хранят указатели на объекты, которые могут быть разного типа (строка, число, None). Это создает огромные накладные расходы на память и проверку типов при каждом обращении к элементу.
Здесь на сцену выходит NumPy (Numerical Python). Его главная фишка - объект ndarray (n-dimensional array). Это блок памяти, где лежат элементы одного и того же типа (например, только целые числа или только вещественные) подряд друг за другом. Благодаря этому процессор может обрабатывать такие данные векторизованными инструкциями (SIMD), что ускоряет операции в десятки и сотни раз.
| Операция | Стандартный Python (List) | NumPy (ndarray) | Причина разницы |
|---|---|---|---|
| Умножение элемента на скаляр | Медленно (цикл Python) | Мгновенно (векторизация) | Отсутствие проверки типов в цикле |
| Потребление памяти | Высокое (указатели + объекты) | Низкое (непрерывный блок памяти) | Эффективное хранение однотипных данных |
| Доступ по индексу | O(1), но с оверхедом | O(1), прямой доступ к памяти | Прямая адресация ячеек памяти |
NumPy: Фундамент вычислений
NumPy - это библиотека для научных вычислений. Она была создана в 2005 году и до сих пор остается базой для почти всех инструментов Data Science в экосистеме Python. Когда вы устанавливаете TensorFlow, Scikit-learn или даже Pandas, они тянут за собой NumPy как обязательную зависимость.
Основная единица работы здесь - многомерный массив. Представьте себе матрицу из линейной алгебры. В NumPy вы можете создать ее одной строкой кода:
import numpy as np
matrix = np.array([[1, 2], [3, 4]])
Что делает NumPy незаменимым?
- Векторизация. Вместо циклов вы пишете одну операцию для всего массива сразу. `matrix * 2` удвоит все элементы мгновенно.
- Линейная алгебра. Умножение матриц, решение систем уравнений, вычисление собственных значений - всё это реализовано через быстрые библиотеки BLAS и LAPACK.
- Работа со случайными числами. Генераторы случайных чисел в NumPy значительно быстрее стандартного модуля `random` и предоставляют богатый выбор распределений (нормальное, пуассоновское и т.д.).
Однако у NumPy есть ограничение: он плохо работает со смешанными типами данных. Если в одном столбце у вас даты, текстовые названия городов и суммы, ndarray превращается в object array, и скорость падает до уровня обычных списков. Именно эту проблему решает следующий игрок.
Pandas: Excel на стероидах
Pandas был создан Уэсом Маккинни в 2008 году специально для финансовых данных. Название происходит от слов "panel data" (панельные данные) и "Python data analysis". По сути, Pandas предоставляет структуру данных, похожую на лист Excel или таблицу SQL, но внутри себя она использует тот самый быстрый NumPy.
Две ключевые структуры данных в Pandas:
- DataFrame - двумерная таблица с подписанными строками и столбцами. Идеально для хранения наборов данных (датасетов).
- Series - одномерный массив с подписями. По сути, один столбец DataFrame.
Почему аналитики любят Pandas? Потому что он берет на себя грязную работу. Загрузка CSV-файла занимает одну строку:
import pandas as pd
df = pd.read_csv('sales_2026.csv')
А дальше начинается магия обработки данных. Вам нужно найти среднюю выручку по регионам? Не нужно писать сложные группировки вручную. Достаточно команды:
df.groupby('region')['revenue'].mean()
Pandas умеет объединять таблицы (JOIN), фильтровать по сложным условиям, пересчитывать индексы и автоматически выравнивать данные при слиянии таблиц с разными порядками строк. Это экономит часы рутины.
Как NumPy и Pandas работают вместе
Многие новички думают, что это конкурирующие инструменты. На самом деле они комплементарны. Pandas использует NumPy для хранения числовых данных внутри своих структур. Когда вы вызываете метод `.values` или `.to_numpy()` у объекта DataFrame, вы получаете сырой NumPy-массив.
Типичный рабочий поток выглядит так:
- Загрузка и очистка: Используем Pandas для чтения файла, удаления дубликатов, заполнения пропусков (`fillna`) и изменения типов данных.
- Подготовка признаков: Создаем новые колонки в DataFrame. Здесь часто приходится конвертировать данные в формат, удобный для машинного обучения.
- Числовые вычисления: Если нужно сделать тяжелую математику (например, рассчитать корреляционную матрицу или провести PCA), мы вынимаем данные из Pandas в NumPy массивы, потому что некоторые алгоритмы ML лучше дружат с чистым NumPy.
- Визуализация и отчетность: Возвращаемся к Pandas для красивого вывода итоговых метрик.
Важный нюанс: старайтесь не создавать лишние копии данных. Операции вроде фильтрации в Pandas могут возвращать копию массива. Если вы работаете с датасетами размером в несколько гигабайт, это может забить оперативную память. Используйте методы вроде `inplace=True` или аккуратное присваивание срезов, чтобы контролировать потребление ресурсов.
Практические примеры задач
Давайте посмотрим на конкретные кейсы, чтобы понять, где граница между инструментами.
Кейс 1: Анализ временных рядов
У вас есть лог сервера с меткой времени и количеством ошибок. Вам нужно посчитать скользящее среднее за последние 7 дней.
- Инструмент: Pandas.
- Почему: Pandas имеет встроенную поддержку временных рядов (`DatetimeIndex`). Метод `.rolling(window='7D').mean()` сделает это за вас. В NumPy пришлось бы вручную managing окна и сдвиги индексов.
Кейс 2: Нормализация данных перед обучением нейросети
Перед тем как подать данные в модель, их нужно привести к диапазону [0, 1].
- Инструмент: NumPy (или sklearn.preprocessing, который использует NumPy).
- Почему: Это чисто математическая операция масштабирования. Формула `(x - min) / (max - min)` выполняется элементарно над всем массивом сразу. Здесь не нужны имена столбцов или метаданные, важна только скорость и точность вычислений.
Кейс 3: Объединение двух источников данных
У вас есть таблица пользователей (ID, Имя) и таблица заказов (ID, Сумма). Нужно получить полный список заказов с именами клиентов.
- Инструмент: Pandas.
- Почему: Функция `pd.merge()` аналогична SQL JOIN. Она понимает ключи соединения, типы соединений (inner, left, outer) и корректно обрабатывает отсутствие совпадений (NaN). Реализовать это на NumPy было бы кошмаром индексации.
Распространенные ошибки новичков
Я видел достаточно много кода на Python для аналитики, и вот топ-3 граблей, на которые наступают все:
- Циклы вместо векторизации. Если вы видите в коде `for i in range(len(df)):` - бейте тревогу. Вы убиваете производительность. Всегда ищите способ сделать операцию над всей колонкой сразу.
- Игнорирование типов данных. Pandas иногда читает цифры как строки (object dtype), если в файле была хотя бы одна опечатка или пробел. Проверьте типы командой `df.dtypes`. Числа должны быть int или float, иначе статистика будет работать неправильно или медленно.
- Chain Assignment. Попытка изменить значение в подмножестве данных вида `df[df['col'] > 5]['new_col'] = 10` часто приводит к предупреждению SettingWithCopyWarning и не меняет исходный датафрейм. Правильно использовать `.loc`: `df.loc[df['col'] > 5, 'new_col'] = 10`.
Будущее: Polars и другие вызовы
Стоит упомянуть, что мир не стоит на месте. Появилась библиотека Polars, написанная на Rust. Она обещает быть в разы быстрее Pandas на больших данных за счет параллелизма и ленивых вычислений. Однако сейчас Pandas остается стандартом индустрии. Большинство учебных материалов, документации библиотек машинного обучения и примеров в интернете используют именно его. Поэтому изучение связки NumPy + Pandas - это инвестиция, которая окупится сразу же.
Нужно ли знать NumPy, если я использую только Pandas?
Да, обязательно. Pandas построен поверх NumPy. Понимание того, как работают массивы, broadcasting (распространение операций) и dtypes (типы данных) критически важно для отладки проблем с производительностью и ошибками в Pandas. Без этого вы будете слепы в сложных ситуациях.
Какие версии Python поддерживаются сегодня?
На октябрь 2026 года актуальными являются Python 3.10-3.12. Старые версии (3.8 и ниже) постепенно теряют поддержку в новых релизах библиотек. Всегда проверяйте совместимость версий NumPy и Pandas с вашей версией интерпретатора, особенно если используете старые проекты.
Можно ли заменить Excel полностью с помощью Pandas?
Для автоматизации рутинных отчетов и обработки больших объемов данных - да, и очень успешно. Но для быстрого визуального исследования «на лету» или создания сложных интерактивных дашбордов с формулами Excel часто удобнее. Pandas идеален для подготовки данных, а Excel - для финальной презентации руководству, если они привыкли к нему.
Что делать, если файл слишком большой для оперативной памяти?
Pandas имеет ограничения по RAM. Если файл весит больше, чем ваша оперативная память, стандартные методы загрузки не сработают. Варианты решений: использование параметра `chunksize` в `read_csv` для обработки кусками, переход на специализированные базы данных (SQL), или использование альтернативных библиотек, таких как Dask или Vaex, которые позволяют работать с данными, превышающими объем RAM.
Есть ли смысл изучать R вместо Python для этих задач?
R исторически силен в статистике и графике (ggplot2). Однако Python выигрывает в универсальности: на нем можно написать не только анализ, но и бэкенд для приложения, автоматизацию сбора данных и интеграцию с облачными сервисами. Рынок труда сейчас сильно смещен в сторону Python, поэтому для карьеры в Data Science выбор Python более перспективен.