🐼 Знаете ли вы, что Pandas умеет работать с данными, которые не помещаются в оперативную память?
Когда говорят о Pandas, часто можно услышать:
«Pandas подходит только для небольших таблиц.»
На самом деле это не совсем так.
Конечно, Pandas загружает данные в память, но это не означает, что он не способен обрабатывать большие файлы.
Представьте ситуацию
Есть CSV-файл размером 50 ГБ.
Если попытаться прочитать его обычным способом:
df = pd.read_csv("sales.csv")
то, скорее всего, памяти компьютера просто не хватит.
Но у Pandas есть режим построчной обработки.
Достаточно указать параметр chunksize:
import pandas as pd
total = 0
for chunk in pd.read_csv("sales.csv", chunksize=100_000):
# Каждый chunk — это обычный DataFrame
total += chunk["sales"].sum()
print(total)
Что здесь происходит?
Вместо загрузки всего файла Pandas:
читает первые 100 000 строк;
создаёт DataFrame;
отдаёт его программе;
освобождает память;
переходит к следующим 100 000 строк.
Таким образом можно обработать файл практически любого размера.
Где это полезно?
✅ журналы событий (лог-файлы);
✅ банковские транзакции;
✅ данные с датчиков;
✅ большие CSV-выгрузки из BI-систем;
✅ результаты работы ETL-процессов.
Но есть нюанс
При работе по частям не все операции становятся возможными.
Например, сортировку всего файла или объединение данных между разными частями придётся организовывать отдельно.
Зато вычислить:
сумму;
среднее;
количество записей;
статистики;
агрегаты по группам
можно без каких-либо проблем.
💡 Интересный факт
Многие считают, что для больших данных сразу нужно переходить на Spark или Dask.
На практике же оказывается, что правильное использование chunksize позволяет решить значительную часть задач обычными средствами Pandas, без развёртывания дополнительных систем.
Именно поэтому опытные аналитики сначала стараются максимально использовать возможности Pandas, а уже потом переходят к более тяжёлым инструментам.
🐼 Pandas – библиотека, без которой сложно представить современный анализ данных на Python
Если вы только начинаете изучать анализ данных, то рано или поздно столкнётесь с библиотекой Pandas.
Именно она стала стандартом де-факто для работы с табличными данными в Python.
С её помощью можно:
✅ читать данные практически из любых источников (CSV, Excel, SQL, Parquet и др.);
✅ очищать и преобразовывать данные;
✅ объединять таблицы (merge);
✅ выполнять группировки (groupby);
✅ работать с датами и временем;
✅ подготавливать данные для машинного обучения и визуализации.
Не случайно Pandas используют практически во всех направлениях Data Science, Data Analytics и Data Engineering.
Что изменилось в Pandas 3.0?
Версия 3.0 — это не просто очередное обновление. Разработчики внесли несколько изменений, которые делают библиотеку более предсказуемой и производительной.
1️⃣ Новый строковый тип данных
Раньше текстовые столбцы обычно имели тип:
object
Теперь по умолчанию используется специальный тип:
str
Это позволяет эффективнее работать со строками и уменьшает количество ошибок, когда в текстовый столбец случайно попадают объекты других типов. При наличии PyArrow под капотом это также может дать выигрыш в производительности и использовании памяти.
2️⃣ Copy-on-Write стал стандартом
Пожалуй, самое важное изменение.
Если вы работали с Pandas, то наверняка хотя бы раз видели загадочное предупреждение:
SettingWithCopyWarning
В Pandas 3.0 модель работы с копиями полностью переработана.
Теперь результат индексирования ведёт себя предсказуемо: изменения нужно вносить в исходный объект, а неоднозначное поведение с копиями и представлениями устранено. Благодаря этому SettingWithCopyWarning больше не используется.
3️⃣ Удалено множество устаревших возможностей
Версия 3.0 завершает переход, который начался ещё в ветке 2.x.
Если при работе с Pandas 2.3 вы не получали предупреждений об устаревших возможностях, то переход на 3.0 обычно проходит значительно проще.
Стоит ли переходить на Pandas 3?
Если вы начинаете новый проект – однозначно да.
Если же у вас есть большой существующий проект, сначала стоит протестировать его на Pandas 2.3, устранить предупреждения о совместимости, а уже затем переходить на версию 3.0. Именно такой путь рекомендуют разработчики библиотеки.
🐍 Срезы (slices) – одна из самых мощных возможностей Python
Большинство разработчиков используют срезы только для получения части списка. Но на самом деле с их помощью можно переворачивать последовательности, копировать коллекции и выбирать элементы с нужным шагом. Достаточно запомнить простую схему:
последовательность[начало:конец:шаг]
Если какой-либо параметр не указан, Python подставит значение автоматически.
numbers = [10, 20, 30, 40, 50, 60]
print(numbers[:3]) # Первые три элемента
print(numbers[2:]) # Все элементы, начиная с индекса 2
print(numbers[1:5]) # Элементы с 1 по 4 индекс
print(numbers[::2]) # Каждый второй элемент
print(numbers[::-1]) # Список в обратном порядке
print(numbers[-3:]) # Последние три элемента
print(numbers[:]) # Полная копия списка
💡 Полезно запомнить:
[:n] – первые n элементов;
[-n:] – последние n элементов;
[::-1] – самый быстрый способ развернуть последовательность;
[:] – создать поверхностную копию списка.
Эти четыре варианта встречаются в реальном Python-коде гораздо чаще, чем кажется на первый взгляд.