Функция Pandas pd.unique()
Часто используемые функции Pandas
pd.unique()используется в библиотеке Pandas дляполучения уникальных значений из массива.Функция возвращает все неповторяющиеся значения из входного массива, удаляя дубликаты.
Это распространённая операция в анализе данных, например подсчёт того, сколько различных значений содержится в столбце, или получение всех категорий категориальной переменной.
Определение слова: uniqueЭто означает «уникальный, отличительный»; здесь имеется в виду возврат неповторяющихся значений из массива.
Базовый синтаксис и параметры
pd.unique()является функцией верхнего уровня библиотеки Pandas, используемой для извлечения уникальных значений из массива.
Формат синтаксиса
pd.unique(values)
Описание параметра
- Параметр:
values- Тип: объект, подобный массиву, например список, Series, одномерный массив и т. д.
- Описание: входные данные, из которых извлекаются уникальные значения. Это может быть любая одномерная структура массива.
Описание функций
- Возвращаемое значение: Возвращает ndarray (массив NumPy), содержащий все уникальные значения.
- Эффект: Удаляет повторяющиеся значения из входных данных, сохраняя каждое значение только один раз.
Примеры
Давайте рассмотрим серию примеров от простых к сложным, чтобы полностью освоитьpd.unique()его использование.
Пример 1: Базовое использование - Извлечение уникальных значений из Series
Пример
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 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 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 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.