Полезные методы 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.000000value_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.17unique() и 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()) # 3map() для поэлементного преобразования
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.0apply() для пользовательских функций
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 2sort_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 30isin() для проверки принадлежности
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 99rename() для изменения имени
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: updatedidxmin() и 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 — локальная установка не требуется.
Все уроки этого курса
- Создание Series
- Доступ по меткам и позициям
- Векторизованные операции над Series
- Полезные методы Series