Pandas vs NumPy — в чём разница и когда что использовать

Коротко

NumPy — библиотека для работы с многомерными числовыми массивами. Pandas — библиотека для табличных данных, построенная поверх NumPy. NumPy быстрее для математики, Pandas удобнее для анализа данных.

Что такое NumPy

NumPy (Numerical Python) — фундамент научных вычислений в Python. Основная структура — ndarray (n-dimensional array): однородный массив фиксированного типа.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(arr.mean())      # 3.0
print(arr * 2)          # [2, 4, 6, 8, 10]

matrix = np.array([[1, 2], [3, 4]])
print(matrix.sum(axis=0))  # [4, 6] — сумма по столбцам

NumPy работает быстро, потому что операции выполняются на уровне C, а не Python.

Что такое Pandas

Pandas предоставляет DataFrame (таблица) и Series (столбец). В отличие от NumPy, колонки могут быть разных типов, есть именованные индексы и встроенные методы для работы с пропусками, группировкой, merge.

import pandas as pd

df = pd.DataFrame({
    'name': ['Анна', 'Борис', 'Вика'],
    'age': [25, 30, 28],
    'salary': [80000, 120000, 95000]
})

print(df.groupby('age')['salary'].mean())
print(df[df['salary'] > 90000])

Ключевые отличия

NumPy Pandas
Основная структура ndarray (массив) DataFrame (таблица)
Типы данных Однородные (один тип на массив) Разнородные (разные типы в колонках)
Индексация Числовая Именованная (строки и колонки)
Работа с пропусками Ограниченная Встроенная (NaN, fillna, dropna)
Группировка Нет groupby, pivot_table
Чтение файлов Базовое (loadtxt, genfromtxt) CSV, Excel, SQL, JSON, Parquet
Производительность Быстрее для чистых вычислений Медленнее из-за гибкости

Когда использовать NumPy

  • Математические операции с массивами: линейная алгебра, статистика
  • Обработка изображений (массивы пикселей)
  • Когда важна производительность на однородных числовых данных
  • Генерация случайных данных (np.random)
# Быстрые поэлементные операции
prices = np.array([100, 200, 150, 300])
discounted = prices * 0.9  # [90, 180, 135, 270]

# Линейная алгебра
A = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])
x = np.linalg.solve(A, b)

Когда использовать Pandas

  • Анализ табличных данных (как SQL, только в Python)
  • Чтение и очистка данных из файлов
  • Группировка, агрегация, merge таблиц
  • Работа с временными рядами
  • Exploratory Data Analysis (EDA)
# Типичная задача аналитика
orders = pd.read_csv('orders.csv')
monthly = (orders
    .assign(month=pd.to_datetime(orders['date']).dt.to_period('M'))
    .groupby('month')['revenue']
    .agg(['sum', 'count', 'mean'])
)

Pandas использует NumPy

Pandas построен на NumPy. Каждая колонка DataFrame — это по сути NumPy массив. Вы можете получить к нему доступ:

df = pd.DataFrame({'a': [1, 2, 3]})
arr = df['a'].values  # numpy.ndarray

На собеседовании полезно показать, что вы понимаете связь между библиотеками: Pandas — высокоуровневый API для анализа данных, NumPy — низкоуровневый движок для вычислений.

Вопросы с собеседований

  • «Когда вы используете NumPy вместо Pandas?» — Когда работаю с однородными числовыми данными и нужна максимальная скорость. Для табличного анализа — Pandas.
  • «Почему NumPy быстрее?» — Операции выполняются на C-уровне, без цикла Python. Данные хранятся непрерывно в памяти.
  • «Можно ли конвертировать DataFrame в NumPy массив?» — Да, df.values или df.to_numpy().

FAQ

Нужно ли знать NumPy для аналитика?

Базово да. Pandas строится на NumPy, и иногда нужно работать с массивами напрямую (например, при кастомных вычислениях или работе с sklearn).

Что быстрее для группировки — Pandas или SQL?

SQL обычно быстрее на больших данных (миллионы строк), потому что работает на сервере с оптимизатором. Pandas удобнее для исследовательского анализа на локальных данных.

Можно ли полностью заменить Pandas на Polars?

Polars — быстрая альтернатива Pandas. Для новых проектов стоит рассмотреть, но на собеседованиях пока спрашивают именно Pandas.