Табличные данные — Pandas, Polars, SQL и PySpark
Назначение
Краткая напоминалка для работы с табличными данными — одна и та же задача формулируется в Excel, Pandas, Polars, SQL и PySpark. Колонка Excel полезна при переходе с электронных таблиц — см. EDA в Excel, формулы с разбором и маршрут Excel → R → Python.
| Инструмент | Где выполняется | Типичный масштаб |
|---|---|---|
| Excel | локальный файл .xlsx / .csv | EDA, отчёты до ~1 млн строк на ПК |
| Pandas | Python, одна машина, RAM | Прототипы, EDA, файлы до объёма ОЗУ |
| Polars | Python (Rust-ядро), одна машина | Те же задачи, что у Pandas, но быстрее на больших таблицах в памяти |
| SQL | СУБД (PostgreSQL, MySQL и др.) | Данные уже в таблицах; фильтр и агрегация на стороне сервера |
| PySpark | Кластер Apache Spark | Данные не помещаются на одном узле или нужен распределённый конвейер |
Учебный контекст — Python для анализа, Data Science и Big Data. Для чистого SQL без Python — шпаргалка по SQL.
В колонках — эквивалентные операции. Имена столбцов (column, col1, agg_col) и имя таблицы (table, table1) — плейсхолдеры. В PySpark для groupBy и агрегатов нужен импорт функций, например from pyspark.sql.functions import avg.
Сводная таблица операций
| Операция | Excel | Pandas | Polars | SQL | PySpark |
|---|---|---|---|---|---|
| Импорт / сессия | открыть файл; таблица Ctrl+T | import pandas as pd | import polars as pl | — | from pyspark.sql import SparkSessionspark = SparkSession.builder.appName("app").getOrCreate() |
| Чтение CSV | "Данные" → из текста/CSV | df = pd.read_csv("data.csv") | df = pl.read_csv("data.csv") | PostgreSQL: COPY table FROM 'data.csv' WITH (FORMAT csv, HEADER true);MySQL: LOAD DATA INFILE ... | df = spark.read.csv("data.csv", header=True, inferSchema=True) |
| Первые k строк | просмотр; автофильтр | df.head(10) | df.head(10) | SELECT * FROM table LIMIT 10; | df.show(10) |
| Размер (строки × столбцы) | СЧЁТ, СЧЁТЗ | df.shape | df.shape | SELECT count(*) ... | df.count(), len(df.columns) |
| Типы столбцов | формат ячеек; "Тип данных" | df.dtypes | df.schema | DESCRIBE / information_schema | df.printSchema() |
| Выбор столбцов | скрыть столбцы; ссылки на диапазон | df[["col1", "col2"]] | df.select("col1", "col2") | SELECT col1, col2 FROM table; | df.select("col1", "col2") |
| Фильтр строк | автофильтр; ФИЛЬТР | df[df["column"] > 10] | df.filter(pl.col("column") > 10) | WHERE column > 10 | df.filter(df["column"] > 10) |
| Сортировка | "Данные" → сортировка | df.sort_values("column") | df.sort("column") | ORDER BY column | df.orderBy("column") |
| Заполнить пропуски | "Найти и выделить" → заменить; ЕСЛИ | df["column"].fillna(0) | fill_null(0) | UPDATE ... WHERE column IS NULL | df.fillna(0) |
| Соединение таблиц | ВПР / XLOOKUP; Power Query | pd.merge(df1, df2, on="col", how="inner") | df1.join(df2, on="col", how="inner") | INNER JOIN ... ON | df1.join(df2, on="col", how="inner") |
| Объединить строки (stack) | листы книги; СЦЕПИТЬ по строкам | pd.concat([df1, df2]) | pl.concat([df1, df2]) | UNION ALL | df1.union(df2) |
| Группировка и среднее | сводная таблица | df.groupby("column")["agg_col"].mean() | group_by(...).agg(pl.mean("agg_col")) | GROUP BY + avg(agg_col) | groupBy("column").agg(avg("agg_col")) |
| Уникальные значения | "Удалить дубликаты"; УНИК | df["column"].unique() | df["column"].unique() | SELECT DISTINCT column | df.select("column").distinct() |
| Переименовать столбец | правка заголовка | df.rename(columns={...}) | df.rename({...}) | ALTER TABLE ... RENAME COLUMN | withColumnRenamed(...) |
| Удалить столбец | удалить столбец | df.drop(columns=["column"]) | df.drop("column") | ALTER TABLE ... DROP COLUMN | df.drop("col1", "col2") |
Когда какой инструмент
Excel — быстрый EDA и согласование метрик с бизнесом; для повторяемой загрузки — Power Query (Power BI и self-service аналитика). См. Разведочный анализ данных в Excel.
Pandas — де-факто стандарт для учебных ноутбуков и быстрого EDA: богатая экосистема, много примеров в сети. Ограничение — данные должны помещаться в память одного процесса.
Polars — тот же класс задач (таблица в RAM), но вычисления на Rust и ленивые планы в LazyFrame часто дают кратный выигрыш по скорости. Синтаксис ближе к Spark/SQL, чем к классическому Pandas.
SQL — когда данные уже лежат в СУБД и переносить миллионы строк в Python невыгодно. Агрегации, join и фильтры выполняет оптимизатор базы; Python подключается через read_sql / драйвер или ORM.
PySpark — когда одной машины мало — кластер, HDFS/S3, потоковая обработка, единый движок с Spark SQL. API DataFrame сознательно похож на Pandas, но вычисления ленивые до вызова действия (.count(), .show(), .write). Пакетная и распределённая обработка (chunk, MapReduce) — Пакетная работа с данными.
Частые отличия (не в таблице)
- Соединение таблиц: в Pandas
pd.merge(..., how="inner"|"left"|"right"|"outer"), в Polars и PySparkjoin(..., how=…)— те же четыре режима, чтоINNER,LEFT,RIGHTиFULL OUTERв SQL. Разбор на двух таблицах с ключами 1–4 — четыре основных JOIN. - Пропуски: в Pandas —
NaN(fillna); в Polars —null(fill_null) и отдельноNaNдля float (fill_nan). В SQL —IS NULL. - Индекс: у Pandas есть именованный индекс строк; у Polars и Spark DataFrame — только столбцы (плюс служебные метаданные).
- Копия и view: в Pandas срезы иногда дают view на те же данные; в Polars и Spark неизменяемость и план выполнения устроены иначе — ориентируйтесь на явные
.copy()/ новые DataFrame. - Union в Spark: схемы
df1иdf2должны совпадать по именам и совместимым типам.
См. также
- NumPy — массивы и матрицы (Lab) — массивы, статистика, матрицы
- Excel и Google Sheets — формулы (Lab) — СУММ, ЕСЛИ, ВПР, сравнение с Pandas
- Pandas — типовые операции (примеры в Lab) — готовые скрипты — CSV, groupby, merge, очистка
- Python — работа с файлами и текстом (Lab) — CSV через stdlib до Pandas
- Python — работа с файлами и текстом (Lab) — CSV через stdlib до Pandas
- Pandas — типовые операции при анализе данных — импорт и экспорт, выбор, статистика, строки, временные ряды (только pandas)
- Очистка и подготовка данных в Pandas — пропуски, дубликаты, типы столбцов, фильтры и
groupbyтолько в pandas - Анализ данных — pandas, NumPy, SciPy — углублённо про Pandas и связку с NumPy
- Объединение таблиц и своды в Pandas — merge, pivot, временные ряды
- Оператор SELECT · JOIN · группировка
- Глоссарий: Pandas