DataFrame и Series: Структуры данных Pandas

Мы успешно освоили базовый синтаксис Python, научились писать циклы и создавать собственные функции. Теперь пришло время познакомиться с инструментом, который превращает Python из языка программирования общего назначения в мощнейшую станцию для аналитики. Речь идет о библиотеке Pandas. В 2026 году это по-прежнему «золотой стандарт» индустрии. Если Excel — это ваша привычная рабочая среда, то Pandas — это тот же Excel, но с реактивным двигателем, способный обрабатывать миллионы строк кода за доли секунды.

Почему аналитики выбирают Pandas?

В предыдущих темах мы работали со списками и словарями. Это отличные инструменты, но когда данных становится много, работать с ними через циклы for становится медленно и неудобно.

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


Series: Одномерный массив с характером

Первая базовая структура, которую нам нужно изучить — это Series (Серия).

Series — это одномерный массив данных, который очень похож на обычный список в Python, но имеет одну важную особенность: у каждого элемента есть свой Index (Индекс) — уникальная метка.

Анатомия Series

Объект Series состоит из трех частей:

  1. Values (Значения) — сами данные.
  2. Index (Индекс) — названия строк (по умолчанию это просто числа от 00 до n1n-1).
  3. Name (Имя) — название самого объекта (аналог заголовка столбца).

Давайте создадим нашу первую серию, используя знания о списках:

import pandas as pd

# Создаем Series из списка цен
prices = pd.Series([1500, 2300, 850, 4200], name='product_price')

print(prices)

Важное замечание: В Pandas 3.0+ (актуальном в 2026 году) по умолчанию включен режим Copy-on-Write. Это значит, что библиотека стала еще умнее управлять памятью: она не копирует данные без необходимости, что критично при работе с большими объемами информации.


DataFrame: Таблица, в которой живет всё

Если Series — это один столбец, то DataFrame (Датафрейм) — это полноценная таблица. Это основная структура, с которой мы будем проводить 90% времени.

DataFrame можно представить как коллекцию объектов Series, которые имеют общий индекс. Это очень похоже на лист в Excel или таблицу в SQL, которую мы изучали в Модуле 3.

Как создать DataFrame?

Самый удобный способ «собрать» таблицу вручную — использовать словарь (dict), где ключи станут названиями столбцов, а значения (списки) — данными.

# Данные о продажах в российском ритейле
data = {
    'product_id': [101, 102, 103, 104],
    'category': ['Электроника', 'Дом', 'Электроника', 'Спорт'],
    'sales_rub': [55000, 12000, 89000, 24500]
}

df = pd.DataFrame(data)

Ключевые атрибуты (свойства) таблицы

В отличие от функций, которые мы создавали ранее, атрибуты не требуют скобок в конце. Они просто сообщают нам информацию об объекте:

  • df.shape — возвращает кортеж с количеством строк и столбцов.
  • df.columns — список всех названий столбцов.
  • df.dtypes — типы данных в каждом столбце (целые числа, строки, даты).

Доступ к данным: loc и iloc

Это фундамент манипуляций в Pandas. Часто новички пытаются использовать циклы для поиска значений, но мы будем использовать профессиональный подход — индексаторы.

  1. loc — выбирает данные по меткам (названиям строк и столбцов).
  2. iloc — выбирает данные по позиции (целочисленным индексам, как в списках).
МетодПо какому признаку ищем?Пример
locПо имени (label)df.loc[0, 'category']
ilocПо номеру (integer)df.iloc[0, 1]

Эффективный подход vs Неэффективный

Допустим, нам нужно получить данные о категории первого товара.

Неэффективно (через цикл, как мы делали в чистом Python):

# Мы так НЕ делаем в аналитике данных
for i in range(len(df)):
    if i == 0:
        print(df['category'][i])

Профессионально (используя возможности Pandas):

# Мгновенный доступ к данным
category_name = df.loc[0, 'category']

Базовое исследование данных

Когда мы получаем новую таблицу, нам нужно быстро понять, что в ней находится. Для этого мы используем встроенные методы:

  • df.head(n) — показывает первые nn строк (по умолчанию 5).
  • df.info() — техническая информация: сколько памяти занимает таблица и есть ли в ней пустые значения.
  • df.describe() — быстрая статистика (среднее, минимум, максимум) для всех числовых столбцов.

Совет эксперта: Всегда начинайте работу с df.info(). В 2026 году данные часто приходят в разных кодировках и форматах. Проверка типов данных (dtypes) на старте спасет вас от ошибок при расчетах в будущем.


Практическое упражнение: Создание структуры

Мы подготовили для вас небольшое задание, чтобы закрепить материал.

  1. Создайте DataFrame из 3-х столбцов: city (города России), temperature (числовые значения) и is_rainy (логические значения True/False).
  2. Используя атрибут .shape, узнайте размерность вашей таблицы.
  3. С помощью .loc выведите температуру во втором городе из вашего списка.

Мы научились создавать таблицы «вручную», но в реальной работе аналитик редко вводит данные с клавиатуры. Обычно данные уже где-то лежат: в огромных CSV-файлах, Excel-отчетах от коллег или в корпоративных базах данных SQL.

В следующей теме мы научимся «всасывать» эти данные в Pandas одним движением руки, чтобы начать настоящий масштабный анализ!