Boas Vitor! Tudo bem? Espero que sim!
Muito bacana sua dúvida. Vou explicar de forma teórica e depois dar um exemplo na prática. Vamos lá?
A função value_counts()
do pandas do pandas é valiosíssima nas análises de dados, o que ela faz é verificar a contagem de dados iguais em um dataframe ou em uma coluna, e retorna uma Series com esse resultado.
A função drop_duplicates()
, por outro lado, percorre o DataFrame retirando todos os registros que são são iguais. E retorna um DataFrame.
Agora vamos às diferenças na prática:
- a
value_counts()
é usada quando o interesse é na quantidade de valores repetidos, enquanto a drop_duplicates()
é usada quando se quer limpar um DataFrame de registros duplicados; - Como dito anteriormente, a
value_counts()
retorna uma Series, enquanto a drop_duplicates()
retorna um DataFrame, ou uma Series, a depender de cada caso.
Normalmente, só usamos a drop_duplicates()
quando precisamos retirar registros duplicados, enquanto a value_counts()
tem diversas outras aplicações.
Agora vamos ver algumas delas:
Pode-se usar a value_counts()
por exemplo, para contar em um DataFrame quantas pessoas pertencem ao sexo masculino e quantas pertencem ao sexo feminino. Vamos ao código.
Considerando o DataFrame:
df = pd.DataFrame([[21,'F', 50, 1.57],[22,'F',58, 1.70], [22,'F',58, 1.70]], index=range(0,3), columns=['Idade', 'Sexo', 'Peso', 'Altura'])
Que visualmente é:
Idade Sexo Peso Altura
0 21 F 50 1.57
1 22 F 58 1.70
2 22 F 58 1.70
Temos 3 pessoas do sexo feminino, sendo que os registros 1 e 2 estão duplicados.
Se usarmos a função value_counts()
para entender quantas pessoas são do sexo feminino, vamos ter um resultado considerando as duplicações:
df.Sexo.value_counts()
que retorna:
F 3
Enquanto se usarmos a função drop_duplicates()
, ela considerará todos os registros iguais como duplicatas:
df.Sexo.drop_duplicates()
que retorna:
0 F
No caso de usar as funções em todo o DataFrame, a value_counts()
vai retornar a as linhas únicas e a frequência com que aparecem no DataFrame:
df.value_counts()
retorna:
Idade Sexo Peso Altura #frequencia
22 F 58 1.70 2
21 F 50 1.57 1
Enquanto usar a drop_duplicates()
: vai gerar um novo DataFrame, sem as linhas que são duplicadas:
df.drop_duplicates()
que retorna:
Idade Sexo Peso Altura
0 21 F 50 1.57
1 22 F 58 1.70
Espero ter ajudado!
Bons estudos!