Функция Pandas pd.value_counts()

Pandas 通用函数Часто используемые функции Pandas


pd.value_counts()— это функция в библиотеке Pandas, используемая дляподсчёта частоты каждого значения. Она вычисляет количество вхождений каждого уникального значения в массиве и возвращает их, отсортированными по частоте в порядке убывания.

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

Значение слова: value_countsЭто означает "count values", т. е. подсчёт количества вхождений каждого значения.


Базовый синтаксис и параметры

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

Формат синтаксиса

pd.value_counts(values, sort=True, ascending=False, normalize=False, bins=None, dropna=True)

Описание параметра

  • Параметр: values
    • Тип: Series, объект, подобный массиву.
    • Описание: Данные, частоты которых нужно подсчитать. Обычно Series.
  • Параметр: sort
    • Тип: Boolean.
    • Сортировать ли по частоте. По умолчаниюTrue(в порядке убывания частоты).
  • Параметр: ascending
    • Тип: Boolean.
    • ЕслиTrue, сортировать по частоте в порядке возрастания; еслиFalse(по умолчанию), сортировать по частоте в порядке убывания.
  • Параметр: normalize
    • Тип: Boolean.
    • ЕслиTrue, возвращать долю каждого значения (от 0 до 1) вместо абсолютной частоты. По умолчанию принимает значениеFalse。
  • Параметр: bins
    • Тип: Integer или None.
    • Если указано целое число, числовые данные разбиваются на интервалы, и подсчитываются частоты (аналогично гистограмме). Не применимо к категориальным данным.
  • Параметр: dropna
    • Тип: Boolean.
    • Включать ли NaN в результаты статистики. По умолчанию принимает значениеTrue(не включено).
  • Описание функций

    • Возвращаемое значение: Возвращает Series, где индекс — уникальные значения, а значения — частоты (или доли).
    • Действие: Подсчитывает и отображает количество вхождений каждого уникального значения.

    Примеры

    Давайте досконально освоимpd.value_counts()использование.

    Пример 1: Базовое использование — подсчёт частот категориальных данных

    Пример

    import pandas as pd
    import numpy as np

    # 1. Создайте Series, содержащий повторяющиеся значения
    colors = pd.Series(['red', 'blue', 'green', 'red', 'blue', 'yellow', 'red', 'blue', 'blue'])

    print("=== Исходная Series ===")
    print(colors)

    # 2. Используйте pd.value_counts() для подсчёта частот
    result = pd.value_counts(colors)
    print("\n=== pd.value_counts() статистика частот ===")
    print(result)

    Ожидаемый вывод:

    === 原始 Series ===
    0       red
    1      blue
    2     green
    3       red
    4     blue
    5     yellow
    6       red
    7      blue
    8       blue
    dtype: object
    
    === pd.value_counts() 频次统计 ===
    blue      4
    red       3
    green     1
    yellow    1
    dtype: int64
    

    Пояснение к коду:

    1. Результаты отсортированы по частоте в порядке убывания; синий встречается чаще всего (4 раза), красный — следующий (3 раза), а зелёный и жёлтый встречаются по 1 разу.
    2. Возвращается Series, где значения цветов являются индексом, а количества — значениями.

    Пример 2: Использование параметра normalize для вычисления пропорций

    normalize=TrueЧастоты можно преобразовать в пропорции, что упрощает просмотр относительного распределения данных.

    Пример

    import pandas as pd
    import numpy as np

    # Создание данных для голосования
    votes = pd.Series(['A', 'B', 'A', 'C', 'A', 'B', 'A', 'A', 'C', 'B', 'A', 'B'])

    print("=== Данные голосования ===")
    print(votes)

    # 1. Абсолютная частота
    print("\n=== Абсолютная частота ===")
    print(pd.value_counts(votes))

    # 2. Относительные доли (normalize=True)
    print("\n=== Относительные доли ===")
    result_normalized = pd.value_counts(votes, normalize=True)
    print(result_normalized)
    print(f"\nСумма долей: {result_normalized.sum():.2f}")

    # 3. Сортировка по возрастанию
    print("\n=== Отсортировано по возрастанию ===")
    print(pd.value_counts(votes, ascending=True))

    Ожидаемый вывод:

    === 投票数据 ===
    0        A
    1        B
    2        A
    3        C
    4        A
    5        B
    值 'A' 出现 6 次,占 50%
    值 'B' 出现 4 次,约 33.3%
    值 'C' 出现 2 次,约 16.7%
    
    === 相对比例 ===
    A    0.500000
    B    0.333333
    C    0.166667
    dtype: float64
    
    === 升序排列 ===
    C    2
    B    4
    A    6
    dtype: int64
    

    Пояснение к коду:

    • Использованиеnormalize=Trueпозволяет быстро рассчитать долю каждой категории.
    • Все доли в сумме дают 1.0, что удобно для анализа долей.
    • Использованиеascending=Trueпозволяет просматривать результаты в порядке возрастания частоты.

    Пример 3: Обработка числовых данных и использование параметра bins

    Для непрерывных числовых значений можно использоватьbinsпараметр для выполнения статистики по интервалам.

    Пример

    import pandas as pd
    import numpy as np

    # 1. Создание числовых данных
    scores = pd.Series([85, 90, 78, 92, 88, 76, 95, 82, 70, 89, 91, 77, 84, 86])

    print("=== Баллы студентов ===")
    print(scores)

    # 2. Без разбивки на интервалы - подсчёт каждого уникального значения
    print("\n=== Подсчёт каждого балла ===")
    print(pd.value_counts(scores))

    # 3. Использование параметра bins для разбивки на интервалы
    print("\n=== Разделено на 4 интервала ===")
    result_bins = pd.value_counts(scores, bins=4)
    print(result_bins)

    # 4. Просмотр границ интервалов
    print("\n=== Границы интервалов ===")
    print(f"Минимальное значение: {scores.min()}, Максимальное значение: {scores.max()}")

    Ожидаемый вывод:

    === 学生成绩 ===
    [85, 90, 78, 92, 88, 76, 95, 82, 70, 89, 91, 77, 84, 86]
    
    === 统计每个分数 ===
    85    2
    90    1
    78    1
    92    1
    88    1
    76    1
    95    1
    82    1
    70    1
    89    1
    91    1
    77    1
    84    1
    86    1
    Name: count, dtype: int64
    
    === 分成 4 个箱 ===
      result_bins = pd.value_counts(scores, bins=4)
    (88.75, 95.0]                 5
    (82.5, 88.75]                 4
    (76.25, 82.5]                 3
    (69.97399999999999, 76.25]    2
    Name: count, dtype: int64
    
    === 分箱边界 ===
    最小值: 70, 最大值: 95
    

    Это похоже на гистограмму и показывает, что распределение оценок в основном сосредоточено в средне-высоком диапазоне. Параметр bins разбивает числовые данные на дискретные интервалы по диапазону, а затем подсчитывает количество данных в каждом интервале.

    Пример 4: Обработка пропущенных значений

    Используяdropnaпараметр определяет, учитываются ли пропущенные значения.

    Пример

    import pandas as pd
    import numpy as np

    # 1. Данные, содержащие пропущенные значения
    data = pd.Series(['a', 'b', np.nan, 'a', None, 'c', np.nan, 'b', 'a'])

    print("=== Данные, содержащие пропущенные значения ===")
    print(data)

    # 2. NaN не включается по умолчанию (dropna=True)
    print("\n=== NaN не включается по умолчанию ===")
    print(pd.value_counts(data))

    # 3. Включить NaN (dropna=False)
    print("\n=== Включение NaN ===")
    print(pd.value_counts(data, dropna=False))

    # 4. Подсчёт пропущенных значений для числовых данных
    numeric_data = pd.Series([1, 2, np.nan, 3, 2, np.nan, 1, 4])
    print("\n=== Числовые данные, содержащие NaN ===")
    print(pd.value_counts(numeric_data, dropna=False))

    Ожидаемый вывод:

    === 包含缺失值的数据 ===
    0       a
    1       b
    2     NaN
    3       a
    4    None
    5       c
    6     NaN
    7       b
    8       a
    dtype: object
    
    === 默认不包含 NaN ===
    a    3
    b    2
    c    1
    dtype: 64
    
    === 包含 NaN (dropna=False) ===
    a       3
    b       2
    NaN     2  # 2 个 NaN (2 个 np.nan)
    c       1
    dtype: int64
    
    === 数值型数据包含 NaN ===
    1.0    2
    2.0    2
    NaN    2  # 2 个 NaN
    3.0    1
    4.0    1
    dtype: int64
    

    Пояснение к коду:

    • По умолчанию (dropna=True), значения NaN не учитываются.
    • Использованиеdropna=Falseпозволяет просмотреть количество пропущенных значений, что полезно при анализе качества данных.
    • Это также применимо к числовым данным.

    Совет: pd.value_counts()Это одна из самых важных функций в разведочном анализе данных, позволяющая быстро понять распределение данных. Если вам нужно только получить список уникальных значений без частот, используйтеpd.unique()функцию.

    Pandas 常用函数Часто используемые функции Pandas

    Другие расширения