Pandas — это популярная и очень мощная библиотека на языке Python, предназначенная для анализа данных и манипуляций с табличными структурами. Она была создана для того, чтобы эффективно работать с данными так, как мы привыкли в электронных таблицах (например, Excel), но при этом обладала гибкостью и быстродействием, характерными для Python и научного стека (NumPy, SciPy и др.).
Pandas включает в Python две дополнительные структуры данных, а именно Pandas Series и Pandas DataFrame. Эти структуры данных позволяют нам работать с маркированными и реляционными данными простым и интуитивно понятным способом.
Для тех, кто не может ждать, вот ссылка на Jupyter Notebook:
Series
Series — это одномерная структура, чем-то похожая на обычный список (array), но с одним важным отличием: у каждого элемента есть своя метка (индекс). Причём Pandas поддерживает различные типы данных, включая числа, строки, даты и т. д.
Почему это полезно?
Вместо того, чтобы обращаться к элементу только по позиции (как в списках), вы можете обращаться к нему по читаемому индексу, например, по названию строки.
Создание Series
- Из списка
- Слева (0, 1, 2, 3) — это индекс.
- Справа (10, 20, 30, 40) — значения.
- Name: Пример Series — это имя Series.
- из NumPy-массива (ndarray)
Индексы будут по умолчанию 0, 1, 2, 3....
- из словаря (dict)
Когда удобнее использовать Series?
- Когда у вас есть одномерные данные (например, последовательность чисел, список категорий, результаты эксперимента), и вам нужно работать с ними удобнее, чем в чистом list или ndarray.
- Когда вы хотите иметь индексы (названия), а не просто позиции [0, 1, 2, ...]. Индексы помогают семантически понимать и выбирать элементы.
- Когда нужна совместимость с функционалом Pandas (например, группировка, функции агрегации, фильтрация и т. п.) для одномерных данных.
Задание собственного набора индексов
Можно вручную задать индексы, если не хочется, чтобы Pandas автоматически их присваивал:
Индексация и выбор данных в Series
1. Индексация по метке (loc)
Если у вашей Series индексы — строки (например, «Яблоко»), то можно обращаться по названиям через .loc:
Можно также передавать список меток:
Или использовать «срез по меткам» (если индексы, например, упорядочены лексикографически).
2. Индексация по позиции (iloc)
Есть способ выборки по числовым позициям (0, 1, 2...):
3. Прямое обращение (квадратные скобки)
Операции и функции с Series
Series позволяет применять арифметические операции, агрегировать, фильтровать и многое другое.
1. Арифметика
Предположим, есть два Series, в которых индексы совпадают (хотя бы частично):
Операции выполняются по индексам. Если индекс не найден во втором Series, получается NaN.
2. Применение математических функций
Или можно использовать методы Pandas напрямую:
Функция ".apply()" применяет любую функцию к каждому элементу.
3. Фильтрация (булевская маска)
Булевская маска [prices > 80] оставляет только те элементы, где условие True.
4. Пропущенные значения (NaN)
Как и в DataFrame, в Series могут быть пропуски. Например, результат арифметических операций или если вы явно задали None / np.nan.
Можно использовать dropna(), fillna() и т. д.
5. Проверка, существует ли индексная метка в Series
6. Изменение элементов
7. Удаление элементов
Изменение индекса: reindex, rename
1. reindex()
Метод reindex() позволяет «подогнать» Series к новому набору индексов. Пример:
- Новый индекс — «А», «Б», «В», «Г».
- Для «Г» не было значения, поэтому fill_value=0.
2. rename()
Можно переименовать индексы:
Или изменить ".name" (имя самой Series):
Другие полезные методы Series
1. value_counts() — подсчитывает, сколько раз встречается каждое значение в Series. Отлично для категориальных (строковых) данных:
2. Статистические методы: sum(), mean(), median(), min(), max(), std(), var(), count(), nunique().
3. sort_values() — сортировка:
ascending=False задаёт обратный порядок, по убыванию.
4. unique() и drop_duplicates() (для удаления дублей или извлечения уникальных значений).
5. apply() и map() — применяют функцию к каждому элементу.
Важные атрибуты Series
1. shape
- Возвращает кортеж, в котором указаны размеры по каждому измерению.
- Для Series это всегда (n,), где n — число элементов.
Это значит, что в Series 4 элемента.
2. size
- Показывает общее количество элементов (число).
- Для одномерной Series size будет равно количеству строк.
3. values
- Возвращает массив значений (обычно это numpy.ndarray), без индексов.
- Удобно, когда нужно получить «сырые» данные.
4. index
- Возвращает объект индекса (Index), который содержит метки элементов.
- Можно получить список меток или переопределить их.
Если задать свой индекс:
5. ndim
- Возвращает число измерений структуры.
- Для Series всегда 1 (одномерная структура).
Когда Series нужны «точно»?
- Если нужны именованные одномерные данные. Классический пример — когда у вас есть «цены товаров», «количество заказов», «имена сотрудников» и вы хотите хранить их в структуре с индексами, а не в обычном списке.
- Если вы обращаетесь к одному столбцу DataFrame. При обращении df["Колонка"] вы получаете именно Series. Все операции, описанные выше, можно делать над этим столбцом.
- Гибкая выборка и фильтрация: благодаря индексам, Series упрощает манипуляции с отдельными записями — легче, чем в простом списке.
- Слияния и арифметика по индексам: если у вас есть два списка данных (например, цены в разные дни) и вы хотите автоматически совмещать их по названиям, то Series сделает это прозрачно, выдавая `NaN там, где нет пересечения.
Ссылка на Jupyter Notebook:
Основной телеграм канал:
Полезные статьи: