Curso
Remover duplicados é uma habilidade essencial para obter contagens precisas, porque você geralmente não quer contar a mesma coisa várias vezes. Em Python, isso pode ser feito com o módulo pandas, que tem um método chamado drop_duplicates.
Vamos entender como usá-lo com a ajuda de alguns exemplos.
Removendo nomes duplicados
Imagine que você tem um dataframe com visitas ao veterinário e o consultório quer saber quantos cães de cada raça passaram por lá. Porém, existem cães como Max e Stella que foram ao veterinário mais de uma vez no seu conjunto de dados. Por isso, você não pode simplesmente contar o número de cada raça na coluna de raças.
print(vet_visits)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Labrador 28.35
2 2018-01-17 Stella Chihuahua 1.51
3 2019-10-19 Lucy Chow Chow 24.07
.. ... ... ... ...
71 2018-01-20 Stella Chihuahua 2.83
72 2019-06-07 Max Chow Chow 24.01
73 2018-08-20 Lucy Chow Chow 24.40
74 2019-04-22 Max Labrador 28.54
Para resolver isso, você removeria as linhas que contêm um nome de cão já listado anteriormente; em outras palavras, extrairia apenas um cão de cada nome do dataset.
Você faz isso usando o método drop_duplicates. Ele recebe o argumento subset, que é a coluna na qual queremos buscar duplicatas — neste caso, queremos todos os nomes únicos.
vet_visits.drop_duplicates(subset="name")
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Chow Chow 24.01
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
(6 2019-06-07 Max Labrador 28.35)
Mas e se houver cães com o mesmo nome?
Removendo pares duplicados
Nesse caso, precisamos considerar mais do que apenas o name ao remover duplicados. Como Max e Max são de raças diferentes, podemos remover as linhas com pares de nome e raça que já apareceram antes no dataset.
unique_dogs = vet_visits.drop_duplicates(subset=["name", "breed"])
print(unique_dogs)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-03-13 Max Chow Chow 24.13
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
6 2019-06-07 Max Labrador 28.35
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
Para basear a remoção de duplicados em várias colunas, podemos passar uma lista de nomes de colunas para o argumento subset — neste caso, name e breed.
Agora os dois Max foram incluídos.
Exemplo interativo
Neste exercício, você vai criar alguns novos DataFrames usando valores únicos de sales. sales está disponível e o pandas foi importado como pd.
Você fará o seguinte:
- Primeiro, remover as linhas de
salescom pares duplicados destoreetype, salvar comostore_typese imprimir o head. - Depois, remover as linhas de
salescom pares duplicados destoreedepartment, salvar comostore_deptse imprimir o head. - Filtrar as linhas que são semanas de feriado e remover datas duplicadas, salvando como
holiday_dates. - Por fim, selecionar a coluna
datedeholiday_datese imprimir o dataframeholiday_dates.
# Drop duplicate store/type combinations
store_types = sales.drop_duplicates(subset=["store", "type"])
print(store_types.head())
# Drop duplicate store/department combinations
store_depts = sales.drop_duplicates(subset=["store", "department"])
print(store_depts.head())
# Subset the rows that are holiday weeks and drop duplicate dates
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")
# Print date col of holiday_dates
print(holiday_dates["date"])
Ao executar o código acima, obtemos o seguinte resultado:
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
901 2 A 1 2010-02-05 35034.06 False 4.550 0.679 8.324
1798 4 A 1 2010-02-05 38724.42 False 6.533 0.686 8.623
2699 6 A 1 2010-02-05 25619.00 False 4.683 0.679 7.259
3593 10 B 1 2010-02-05 40212.84 False 12.411 0.782 9.765
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
12 1 A 2 2010-02-05 50605.27 False 5.728 0.679 8.106
24 1 A 3 2010-02-05 13740.12 False 5.728 0.679 8.106
36 1 A 4 2010-02-05 39954.04 False 5.728 0.679 8.106
48 1 A 5 2010-02-05 32229.38 False 5.728 0.679 8.106
498 2010-09-10
691 2011-11-25
2315 2010-02-12
6735 2012-09-07
6810 2010-12-31
6815 2012-02-10
6820 2011-09-09
Name: date, dtype: datetime64[ns]
Para saber mais sobre contagem e agregação de dados, confira este vídeo do nosso curso Data Manipulation with pandas.
Este conteúdo foi extraído do curso Data Manipulation with pandas da DataCamp, por Maggie Matsui e Richie Cotton.
