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.