0Pricing
Pandas & NumPy Academy · Урок

Полезные методы Series

Используйте describe(), value_counts(), unique() и map(), чтобы быстро обобщать и преобразовывать Series

«Полезные методы Series» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Быстрое обобщение с помощью describe()

s.describe() одним вызовом создаёт статистическое описание: количество, среднее, стандартное отклонение, min, 25-й процентиль (Q1), медиану (Q2), 75-й процентиль (Q3) и max. Для строковых Series вместо этого возвращаются количество, unique, top и частота. Это самый быстрый способ получить представление о распределении столбца при первом знакомстве с набором данных.

import pandas as pd

ages = pd.Series([25, 32, 19, 45, 28, 31, 22, 40])
print(ages.describe())
# count     8.000000
# mean     30.250000
# std       8.406...
# min      19.000000
# 25%      24.250000
# 50%      29.500000
# 75%      34.750000
# max      45.000000

value_counts() для таблиц частот

s.value_counts() возвращает новый Series, в котором уникальные значения являются индексом, а их количество — данными; результат сортируется по количеству в порядке убывания. Передайте normalize=True, чтобы получить доли вместо абсолютных количеств. Это первое, что стоит выполнить для категориального столбца, чтобы понять его распределение.

import pandas as pd

colors = pd.Series(['red', 'blue', 'red', 'green', 'blue', 'red'])
print(colors.value_counts())
# red      3
# blue     2
# green    1
print(colors.value_counts(normalize=True).round(2))
# red      0.50  blue  0.33  green  0.17

unique() и nunique()

s.unique() возвращает массив NumPy с различными значениями в порядке их первого появления (в отличие от value_counts, который сортирует по частоте). s.nunique() возвращает количество различных значений в виде целого числа — кардинальность столбца. По умолчанию оба метода пропускают NaN. Используйте nunique(dropna=False), чтобы считать NaN отдельным значением.

import pandas as pd

s = pd.Series(['apple', 'banana', 'apple', 'cherry', 'banana'])
print(s.unique())    # ['apple' 'banana' 'cherry']
print(s.nunique())   # 3

map() для поэлементного преобразования

s.map() применяет функцию, словарь или другой Series к каждому элементу. Если передать словарь, каждое значение заменяется соответствующим значением из словаря, а значения, отсутствующие в словаре, превращаются в NaN. Если передать функцию, она применяется поэлементно. map особенно удобен для перекодирования категориальных меток или применения таблиц соответствий.

import pandas as pd

grades = pd.Series(['A', 'B', 'C', 'A', 'B'])
gpa = {'A': 4.0, 'B': 3.0, 'C': 2.0}
print(grades.map(gpa))
# 0    4.0
# 1    3.0
# 2    2.0
# 3    4.0
# 4    3.0

apply() для пользовательских функций

s.apply(func) применяет вызываемый объект Python к каждому элементу и собирает результаты. В отличие от map(), этот метод предназначен для более сложных функций, которые могут возвращать нескалярные объекты. Для простых поэлементных преобразований предпочитайте map() или векторизованное выражение; используйте apply(), когда логику слишком сложно напрямую векторизовать.

import pandas as pd

sentences = pd.Series(['Hello world', 'Pandas is great', 'Data science'])
word_counts = sentences.apply(lambda x: len(x.split()))
print(word_counts)
# 0    2
# 1    3
# 2    2

sort_values() и sort_index()

s.sort_values() возвращает Series, отсортированный по значениям данных в порядке возрастания (для сортировки по убыванию передайте ascending=False). s.sort_index() сортирует по меткам индекса. По умолчанию ни один из методов не изменяет исходный Series. Передайте inplace=True, чтобы изменить его непосредственно (в современном коде Pandas это менее рекомендуется, если операции объединяются в цепочку).

import pandas as pd

s = pd.Series([30, 10, 50, 20], index=['d', 'a', 'c', 'b'])
print(s.sort_values())
# a    10
# b    20
# d    30
# c    50
print(s.sort_index())
# a    10
# b    20
# c    50
# d    30

isin() для проверки принадлежности

s.isin(values) возвращает логический Series, содержащий True там, где элемент входит в переданный список или множество. Это понятнее, чем несколько условий с |, и значительно быстрее для больших множеств. Метод часто используют для фильтрации строк, принадлежащих определённой группе, или для пометки записей, соответствующих списку поиска.

import pandas as pd

countries = pd.Series(['DE', 'US', 'FR', 'UK', 'US', 'DE'])
nordics = ['DE', 'FR']
print(countries.isin(nordics))
# 0     True  1    False  2     True  3    False  4    False  5     True
print(countries[countries.isin(nordics)])

between() для фильтрации по диапазону

s.between(left, right, inclusive='both') возвращает логический Series со значением True там, где значение попадает в диапазон [left, right]. По умолчанию обе границы включаются. Это короче, чем запись (s >= left) & (s <= right), и яснее выражает намерение. Метод полезен для фильтрации числовых диапазонов, например возрастных групп или ценовых категорий.

import pandas as pd

scores = pd.Series([45, 72, 83, 91, 55, 68])
pass_mask = scores.between(60, 100)
print(pass_mask)
# 0    False  1    True  2    True  3    True  4    False  5    True
print(scores[pass_mask].values)  # [72 83 91 68]

head() и tail() для быстрой проверки

s.head(n) возвращает первые n элементов (по умолчанию 5), а s.tail(n) — последние n. Эти методы постоянно используют при изучении данных, чтобы просмотреть начало и конец длинного Series, не выводя тысячи строк. Они возвращают новый Series (срез), поэтому не изменяют исходный объект.

import pandas as pd

s = pd.Series(range(100))
print(s.head(3))
# 0    0
# 1    1
# 2    2
print(s.tail(3))
# 97    97
# 98    98
# 99    99

rename() для изменения имени

s.rename('new_name') возвращает новый Series с другим атрибутом name. Чтобы переименовать метки индекса, передайте словарь или функцию: s.rename(index={'old': 'new'}). Переименование важно перед объединением Series в DataFrame, поскольку значение name Series становится заголовком столбца. Всегда переименовывайте объект, а не переназначайте необработанные значения.

import pandas as pd

s = pd.Series([1, 2, 3], index=['a', 'b', 'c'], name='original')
renamed = s.rename('updated').rename(index={'a': 'x', 'b': 'y', 'c': 'z'})
print(renamed)
# x    1
# y    2
# z    3
# Name: updated

idxmin() и idxmax()

s.idxmin() возвращает метку индекса минимального значения, а s.idxmax() — метку максимального значения. Это полезнее, чем argmin/argmax, когда индекс содержит осмысленные метки, например даты или названия товаров: Вы получаете настоящий идентификатор, а не только номер позиции.

import pandas as pd

scores = pd.Series({'Alice': 88, 'Bob': 73, 'Carol': 95, 'Dan': 60})
print('Best:', scores.idxmax(), scores.max())   # Carol 95
print('Worst:', scores.idxmin(), scores.min())  # Dan   60

Быстрая проверка

Проверьте, насколько хорошо Вы поняли материал этого урока о полезных методах Series.

Итоги урока

В этом уроке Вы узнали: describe() за один вызов предоставляет статистическую сводку, value_counts() создаёт таблицу частот уникальных значений, а map() преобразует значения с помощью словаря, тогда как apply() применяет пользовательскую функцию к каждому элементу. Далее мы начнём работать с DataFrames — основным двумерным инструментом анализа данных в Pandas.

Часто задаваемые вопросы

Урок «Полезные методы Series» бесплатный?

Да — полный текст урока «Полезные методы Series» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Чему я научусь в уроке «Полезные методы Series»?

Используйте describe(), value_counts(), unique() и map(), чтобы быстро обобщать и преобразовывать Series Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?

Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Полезные методы Series»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?

Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание Series
  2. Доступ по меткам и позициям
  3. Векторизованные операции над Series
  4. Полезные методы Series
← Назад к Pandas & NumPy Academy