O método unique() é uma função essencial na biblioteca Pandas para Python que retorna os valores únicos de uma Series (coluna) em ordem de aparecimento. É extremamente útil para análise exploratória de dados, especialmente para variáveis categóricas.
O que é df.unique()?
O método unique() retorna um array NumPy com os valores únicos de uma Series (coluna) do Pandas. Os valores são retornados na ordem em que aparecem na Series, o que preserva a sequência original.
Características importantes:
- Retorna apenas valores únicos, eliminando duplicatas
- Preserva a ordem de aparecimento dos valores
- Funciona apenas com Series (colunas individuais), não com DataFrames completos
- Ignora valores NaN por padrão (dependendo da versão do Pandas)
Exemplo básico de uso:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd import numpy as np # Criando um DataFrame de exemplo df = pd.DataFrame({ 'fruta': ['maçã', 'banana', 'laranja', 'maçã', 'uva', 'banana', 'maçã'], 'quantidade': [5, 3, 2, 4, 6, 3, 2], 'cor': ['vermelho', 'amarelo', 'laranja', 'vermelho', 'roxo', 'amarelo', 'verde'] }) # Obtendo valores únicos da coluna 'fruta' valores_unicos = df['fruta'].unique() print("Valores únicos na coluna 'fruta':") print(valores_unicos) print(f"Tipo de retorno: {type(valores_unicos)}") |
Saída esperada do código acima:
|
1 2 3 |
Valores únicos na coluna 'fruta': ['maçã' 'banana' 'laranja' 'uva'] Tipo de retorno: <class 'numpy.ndarray'> |
Comparação com Funções Similares
unique() vs value_counts()
Enquanto unique() retorna apenas os valores únicos, value_counts() retorna tanto os valores únicos quanto suas contagens:
unique():
- Retorna array com valores únicos
- Preserva ordem de aparecimento
- Não mostra frequências
- Mais rápido para apenas obter valores distintos
value_counts():
- Retorna Series com valores únicos e contagens
- Ordenado por frequência (padrão)
- Mostra contagem de cada valor
- Mais informativo para análise estatística
Exemplo comparativo:
|
1 2 3 4 5 6 7 8 |
# Usando unique() valores_unicos = df['fruta'].unique() print("unique():", valores_unicos) # Usando value_counts() contagem_valores = df['fruta'].value_counts() print("\nvalue_counts():") print(contagem_valores) |
Em R, as funções equivalentes são unique() e table():
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Criando um data frame de exemplo em R df <- data.frame( fruta = c('maçã', 'banana', 'laranja', 'maçã', 'uva', 'banana', 'maçã'), quantidade = c(5, 3, 2, 4, 6, 3, 2), cor = c('vermelho', 'amarelo', 'laranja', 'vermelho', 'roxo', 'amarelo', 'verde') ) # Usando unique() em R valores_unicos <- unique(df$fruta) print("Valores únicos:") print(valores_unicos) # Usando table() em R contagem_valores <- table(df$fruta) print("Contagem de valores:") print(contagem_valores) |
unique() vs nunique()
Enquanto unique() retorna os valores únicos, nunique() retorna apenas a contagem de valores únicos:
unique():
- Retorna os valores únicos
- Útil quando precisamos dos valores específicos
- Permite iterar sobre os valores distintos
nunique():
- Retorna apenas o número de valores únicos
- Útil para estatísticas rápidas
- Mais eficiente quando só precisamos da contagem
Exemplo comparativo:
|
1 2 3 4 5 6 7 8 |
# Usando unique() para obter os valores valores_unicos = df['fruta'].unique() print("Valores únicos:", valores_unicos) print("Número de valores únicos:", len(valores_unicos)) # Usando nunique() para obter apenas a contagem numero_unicos = df['fruta'].nunique() print("Número de valores únicos (com nunique()):", numero_unicos) |
Em R, podemos usar length(unique()) para obter o equivalente a nunique():
|
1 2 3 |
# Número de valores únicos em R numero_unicos <- length(unique(df$fruta)) print(paste("Número de valores únicos:", numero_unicos)) |
Aplicações Práticas do unique()
O método unique() é extremamente útil em diversas situações de análise de dados:
1. Análise de Variáveis Categóricas
Identificar todas as categorias presentes em uma variável:
|
1 2 3 |
# Analisando categorias em uma coluna categorias = df['cor'].unique() print("Cores disponíveis:", categorias) |
2. Criação de Mapas de Valores
Usar os valores únicos para criar dicionários de mapeamento:
|
1 2 3 4 |
# Criando um mapeamento de valores valores_unicos = df['fruta'].unique() mapeamento = {valor: idx for idx, valor in enumerate(valores_unicos)} print("Mapeamento:", mapeamento) |
3. Filtragem de Dados
Usar valores únicos para filtrar o DataFrame:
|
1 2 3 |
# Filtrando para incluir apenas certos valores valores_permitidos = ['maçã', 'uva'] df_filtrado = df[df['fruta'].isin(valores_permitidos)] |
Em R, aplicações similares com unique():
|
1 2 3 4 5 6 7 |
# Análise de categorias categorias <- unique(df$cor) print(paste("Cores disponíveis:", paste(categorias, collapse = ", "))) # Filtragem de dados valores_permitidos <- c('maçã', 'uva') df_filtrado <- df[df$fruta %in% valores_permitidos, ] |
Quando Usar df.unique()
Análise Exploratória de Dados
Use unique() para entender rapidamente as categorias presentes em uma coluna.
|
1 2 3 |
# Explorando categorias em uma coluna print("Departamentos únicos:", df['departamento'].unique()) print("Cargos únicos:", df['cargo'].unique()) |
Pré-processamento de Dados
Use unique() para identificar valores que precisam ser tratados antes da modelagem.
|
1 2 3 4 |
# Identificando valores problemáticos valores_unicos = df['idade'].unique() valores_estranhos = [v for v in valores_unicos if not isinstance(v, (int, float)) or v < 0 or v > 120] print("Valores problemáticos na coluna 'idade':", valores_estranhos) |
Criação de Variáveis Dummy
Use unique() para identificar todas as categorias necessárias para criar variáveis dummy.
|
1 2 3 |
# Preparando para one-hot encoding categorias = df['categoria'].unique() print("Categorias para encoding:", categorias) |
Em R, uso similar para one-hot encoding:
|
1 2 3 |
# Preparando para criar variáveis dummy categorias <- unique(df$categoria) print(paste("Categorias para encoding:", paste(categorias, collapse = ", "))) |
Exemplo Prático Completo
Vamos explorar um exemplo prático de uso do unique() em um conjunto de dados mais complexo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
import pandas as pd import numpy as np # Criando um DataFrame mais complexo com dados missing np.random.seed(42) dados = { 'id': range(1, 21), 'idade': np.random.randint(18, 70, 20), 'cidade': np.random.choice(['São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Curitiba', None], 20), 'nível_educacional': np.random.choice(['Fundamental', 'Médio', 'Superior', 'Pós-graduação', None], 20), 'salário': np.random.normal(5000, 2000, 20) } df = pd.DataFrame(dados) # Adicionando alguns outliers no salário df.loc[::5, 'salário'] = df.loc[::5, 'salário'] * 3 print("Primeiras linhas do DataFrame:") print(df.head()) print("\n" + "="*50) print("ANÁLISE COM unique()") print("="*50) # Analisando valores únicos em cada coluna categórica print("\n1. Valores únicos na coluna 'cidade':") cidades_unicas = df['cidade'].unique() print(cidades_unicas) print("\n2. Valores únicos na coluna 'nível_educacional':") niveis_unicos = df['nível_educacional'].unique() print(niveis_unicos) print("\n3. Número de valores únicos por coluna:") for coluna in df.columns: if df[coluna].dtype == 'object' or pd.api.types.is_categorical_dtype(df[coluna]): n_unicos = df[coluna].nunique() print(f"{coluna}: {n_unicos} valores únicos") print("\n4. Valores únicos na coluna numérica 'idade':") idades_unicas = df['idade'].unique() print(f"Idades únicas: {np.sort(idades_unicas)}") print(f"Range de idades: {idades_unicas.min()} - {idades_unicas.max()}") |
Em R, podemos realizar uma análise similar com:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
set.seed(42) dados <- data.frame( id = 1:20, idade = sample(18:70, 20, replace = TRUE), cidade = sample(c('São Paulo', 'Rio de Janeiro', 'Belo Horizonte', 'Curitiba', NA), 20, replace = TRUE), nivel_educacional = sample(c('Fundamental', 'Médio', 'Superior', 'Pós-graduação', NA), 20, replace = TRUE), salario = rnorm(20, 5000, 2000) ) # Adicionando outliers dados$salario[seq(1, 20, by = 5)] <- dados$salario[seq(1, 20, by = 5)] * 3 print("Primeiras linhas do data frame:") print(head(dados)) cat("\n", rep("=", 50), "\n") cat("ANÁLISE COM unique()\n") cat(rep("=", 50), "\n") # Analisando valores únicos cat("\n1. Valores únicos na coluna 'cidade':\n") cidades_unicas <- unique(dados$cidade) print(cidades_unicas) cat("\n2. Valores únicos na coluna 'nível_educacional':\n") niveis_unicos <- unique(dados$nivel_educacional) print(niveis_unicos) cat("\n3. Número de valores únicos por coluna:\n") for (coluna in names(dados)) { if (is.character(dados[[coluna]]) || is.factor(dados[[coluna]])) { n_unicos <- length(unique(dados[[coluna]])) cat(paste0(coluna, ": ", n_unicos, " valores únicos\n")) } } cat("\n4. Valores únicos na coluna numérica 'idade':\n") idades_unicas <- unique(dados$idade) cat(paste("Idades únicas:", paste(sort(idades_unicas), collapse = ", "), "\n")) cat(paste("Range de idades:", min(idades_unicas, na.rm = TRUE), "-", max(idades_unicas, na.rm = TRUE), "\n")) |
⚠️ Considerações Importantes
Ao usar unique(), esteja ciente das seguintes considerações:
unique()não funciona diretamente em DataFrames completos, apenas em Series- Valores NaN são tratados de forma diferente dependendo da versão do Pandas
- Para colunas com muitos valores únicos, o resultado pode ser muito grande
- A ordem dos valores é preservada conforme aparecem nos dados, não em ordem alfabética/numerica
- Para obter valores únicos ordenados, use
sorted(df['coluna'].unique())
Conclusão
O método df.unique() é uma ferramenta simples mas poderosa para análise exploratória de dados em Pandas. Ele fornece uma maneira rápida de identificar valores distintos em uma coluna, sendo especialmente útil para variáveis categóricas.
Lembre-se de que unique() é mais eficiente quando você precisa dos valores específicos, enquanto value_counts() é melhor quando você precisa tanto dos valores quanto de suas frequências, e nunique() é mais adequado quando você precisa apenas da contagem de valores únicos.
Referências
- Documentação oficial do Pandas: Series.unique()
- Pandas User Guide: Working with Unique Values
- Real Python: Finding Unique Values in Pandas