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

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


pd.unique()используется в библиотеке Pandas дляполучения уникальных значений из массива.Функция возвращает все неповторяющиеся значения из входного массива, удаляя дубликаты.

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

Определение слова: uniqueЭто означает «уникальный, отличительный»; здесь имеется в виду возврат неповторяющихся значений из массива.


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

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

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

pd.unique(values)

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

  • Параметр: values
    • Тип: объект, подобный массиву, например список, Series, одномерный массив и т. д.
    • Описание: входные данные, из которых извлекаются уникальные значения. Это может быть любая одномерная структура массива.

Описание функций

  • Возвращаемое значение: Возвращает ndarray (массив NumPy), содержащий все уникальные значения.
  • Эффект: Удаляет повторяющиеся значения из входных данных, сохраняя каждое значение только один раз.

Примеры

Давайте рассмотрим серию примеров от простых к сложным, чтобы полностью освоитьpd.unique()его использование.

Пример 1: Базовое использование - Извлечение уникальных значений из Series

Пример

import pandas as pd
import numpy as np

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

print(=== Исходный Series ===)
print(colors)

# 2. Используйте pd.unique() для получения уникальных значений
unique_values = pd.unique(colors)
print("\n=== pd.unique() Уникальные значения ===")
print(unique_values)
print(f"\nКоличество уникальных значений: {len(unique_values)}")

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

=== 原始 Series ===
0       red
1      blue
2     green
3       red
4      blue
5    yellow
6       red
dtype: object

=== pd.unique() 唯一值 ===
['red' 'blue' 'green' 'yellow']
唯一值数量: 4

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

  • Исходный Series содержит 7 элементов, но только 4 уникальных значения.
  • pd.unique()Возвращает массив NumPy, содержащий все неповторяющиеся значения.
  • Возвращаемый результат не гарантирует порядок (но обычно он соответствует порядку первого появления).

Пример 2: Извлечение уникальных значений из списков и массивов

pd.unique()Он может обрабатывать не только Series, но и различные структуры массивов.

Пример

import pandas as pd
import numpy as np

# 1. Извлечение уникальных значений из списка
numbers = [1, 2, 3, 2, 1, 4, 5, 3, 2]
print(=== Исходный список ===")
print(numbers)

unique_numbers = pd.unique(numbers)
print("\n=== Уникальные значения из списка ===")
print(unique_numbers)
print(f"Тип: {type(unique_numbers)}")

# 2. Извлечение уникальных значений из массива NumPy
arr = np.array(['a', 'b', 'a', 'c', 'b', 'd'])
print("\n=== Массив NumPy ===")
print(arr)
print("Уникальные значения:", pd.unique(arr))

# 3. Извлечение из столбца DataFrame
df = pd.DataFrame({
    'name': ['Алиса', 'Боб', 'Чарли', 'Алиса', 'Диана'],
    'city': ['Пекин', 'Шанхай', 'Пекин', 'Пекин', 'Гуанчжоу']
})
print("\n=== DataFrame ===")
print(df)
print("\nУникальные значения столбца name:, pd.unique(df['name']))
print("Уникальные значения столбца city:", pd.unique(df['city']))

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

=== 原始列表 ===
[1, 2, 3, 2, 1, 4, 5, 3, 2]

=== 列表的唯一值 ===
[1 2 3 4 5]
Type: <class 'numpy.ndarray'>

=== NumPy 数组 ===
['a' 'b' 'a' 'c' 'b' 'd']
唯一值: ['a' 'b' 'c' 'd']

=== DataFrame ===
      name     city
0    Alice   Beijing
1      Bob  Shanghai
2  Charlie   Beijing
3    Alice   Beijing
4   Diana  Guangzhong

=== name 列的唯一值: ['Alice' 'Bob' 'Charlie' 'Diana']
=== city 列的唯一值: ['Beijing' 'Shanghai' 'Guangzhou']

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

  • pd.unique()Он может обрабатывать списки Python, массивы NumPy и столбцы DataFrame.
  • Возвращаемый результат всегда является одномерным массивом NumPy.
  • При работе с DataFrame необходимо указать конкретный столбец (используя синтаксис квадратных скобок).

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

При работе с числовыми уникальными значениями можно удобно выполнять сортировку и статистический анализ.

Пример

import pandas as pd
import numpy as np

# 1. Series, содержащий повторяющиеся числовые значения
scores = pd.Series([85, 90, 78, 85, 92, 90, 78, 88, 95])

print(=== Исходные баллы ===)
print(scores)

# 2. Получить уникальные значения и отсортировать их
unique_scores = pd.unique(scores)
print("\n=== Уникальные значения (без сортировки) ===)
print(unique_scores)

# 3. Отсортированные уникальные значения
unique_sorted = np.unique(unique_scores)
print("\n=== Уникальные значения (отсортированные) ===)
print(unique_sorted)

# 4. Подсчет количества вхождений каждого уникального значения
print("\n=== Уникальные значения и частоты ===)
value_counts = pd.Series(scores).value_counts()
print(value_counts)

# 5. Получить статистическую информацию для уникальных значений
print("\n=== Базовая статистика ===)
print(f"Количество уникальных значений: {len(unique_scores)}")
print(f"Минимальное значение: {unique_scores.min()}")
print(f"Максимальное значение: {unique_scores.max()}")
print(f"Среднее значение: {unique_scores.mean():.2f}")

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

>--- 原始分数 ---
0    85
1    90
2    78
85、90、78 各出现 2 次,88、95 各出现 1 次。
=== 唯一值及频次 ===
85    2
90    2
78    2
88    1
95    1
dtype: int

=== 基本统计 ===
唯一值数量: 5
最小值: 78
最大值: 95
平均值: 86.40

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

  • Вы можете использоватьnp.unique()для сортировки результатов.
  • В сочетании сvalue_counts()вы можете увидеть частоту каждого уникального значения.
  • Массив уникальных значений можно использовать для численных вычислений, как обычный массив.

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

pd.unique()Он вернёт пропущенные значения (NaN) как допустимое уникальное значение.

Пример

import pandas as pd
import numpy as np

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

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

# 2. Получить уникальные значения (NaN будет рассматриваться как уникальное значение)
unique_with_nan = pd.unique(data)
print("\n=== Уникальные значения, включая NaN ===)
print(unique_with_nan)
print(f"Количество уникальных значений (включая NaN): {len(unique_with_nan)}")

# 3. Уникальные значения после исключения NaN
unique_no_nan = pd.unique(data[data.notna()])
print("\n=== Уникальные значения без NaN ===)
print(unique_no_nan)
print(f"Количество уникальных значений (исключая NaN): {len(unique_no_nan)}")

# 4. Используйте isna() для проверки наличия NaN
has_nan = pd.isna(unique_with_nan).any()
print(f"\nСуществует ли NaN: {has_nan}")

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

=== 包含缺失值的数据 ===
0       a
1       b
2     NaN
3       a
4    None
5       different 'c' appears twice: None and NaN are both treated as missing values.
print("\n=== 唯一值数量(含 NaN): 3 ===")
print("['a', 'b', nan]")

=== 排除 NaN 后的唯一值 ===
['a', 'b', 'c']
唯一值数量(不含 NaN): 3

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

  • И NaN, и None рассматриваются как пропущенные значения и учитываются как одно среди уникальных значений.
  • Вы можете использоватьdata[data.notna()]сначала отфильтровать пропущенные значения, затем извлечь уникальные значения.
  • pd.isna()Можно проверить, содержит ли массив уникальных значений NaN.

Совет: pd.unique()Возвращаемое значение — массив NumPy. Если нужно вернуть объект pandas (например, Series), можно использоватьSeries.unique()метод, который вернёт Series.

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

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