Introdução
Bem-vindo ao laboratório de Limpeza Básica de Dados com Pandas. A limpeza de dados é um primeiro passo crucial em qualquer projeto de análise de dados ou aprendizado de máquina. Dados do mundo real são frequentemente desorganizados, contendo valores ausentes, entradas duplicadas ou tipos de dados incorretos. O uso de dados brutos e não limpos pode levar a análises imprecisas e conclusões não confiáveis.
Pandas é uma poderosa biblioteca Python que fornece estruturas de dados e ferramentas de análise de dados de alto desempenho e fáceis de usar. É a ferramenta de referência para limpeza e manipulação de dados em Python.
Neste laboratório, você aprenderá as técnicas fundamentais para limpar um conjunto de dados usando Pandas. Você praticará:
- Remover linhas com valores ausentes usando
dropna(). - Preencher valores ausentes com
fillna(). - Remover linhas duplicadas com
drop_duplicates(). - Renomear colunas com
rename(). - Converter tipos de dados de colunas com
astype().
Ao final deste laboratório, você terá uma compreensão sólida do fluxo de trabalho básico de limpeza de dados em Pandas.
Remover linhas com o método dropna
Nesta etapa, você aprenderá como lidar com dados ausentes removendo linhas que contêm valores nulos. Em Pandas, dados ausentes são representados por NaN (Not a Number). Uma das estratégias mais simples para lidar com valores NaN é remover as linhas ou colunas que os contêm.
O método dropna() permite fazer isso facilmente. Por padrão, ele remove qualquer linha que contenha pelo menos um valor NaN.
Primeiro, vamos executar o script inicial para ver nosso DataFrame de partida. O script de configuração já criou um arquivo chamado main.py no diretório ~/project.
Abra um terminal no WebIDE e execute o seguinte comando:
python3 main.py
Você deverá ver o DataFrame original, que contém valores NaN nas colunas age e city.
Original DataFrame:
name age city SALARY_IN_USD
0 Alice 25.0 New York 50000
1 Bob 30.0 Los Angeles 60000
2 Charlie 35.0 New York 70000
3 David 40.0 Chicago 80000
4 Alice 25.0 New York 50000
5 Eva NaN Boston 90000
6 Frank 45.0 NaN 100000
Original DataFrame Info:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 4 columns):
## Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 7 non-null object
1 age 6 non-null float64
2 city 6 non-null object
3 SALARY_IN_USD 7 non-null object
dtypes: float64(1), object(3)
memory usage: 352.0+ bytes
Agora, vamos usar dropna() para ver como ele funciona. Abra o arquivo main.py no explorador de arquivos no painel esquerdo. Adicione o seguinte código ao final do arquivo. Este código criará um novo DataFrame df_dropped com as linhas NaN removidas e o imprimirá. Ainda não estamos modificando o df original, para que possamos explorar outros métodos nas próximas etapas.
## Add this to the end of main.py
print("\nDataFrame after dropping rows with any missing values:")
df_dropped = df.dropna()
print(df_dropped)
Salve o arquivo (Ctrl+S ou Cmd+S) e execute-o novamente no terminal:
python3 main.py
A saída agora incluirá uma nova seção mostrando o DataFrame após a remoção das linhas com valores NaN (linhas de Eva e Frank).
## ... (previous output) ...
DataFrame after dropping rows with any missing values:
name age city SALARY_IN_USD
0 Alice 25.0 New York 50000
1 Bob 30.0 Los Angeles 60000
2 Charlie 35.0 New York 70000
3 David 40.0 Chicago 80000
4 Alice 25.0 New York 50000
Preencher valores ausentes usando fillna
Nesta etapa, você aprenderá outra forma de lidar com dados ausentes: preencher os valores ausentes com um valor específico usando o método fillna(). Remover linhas com dados ausentes pode, às vezes, levar a uma perda significativa de dados, especialmente se muitas linhas tiverem valores ausentes. Preenchê-los é frequentemente uma alternativa melhor.
Você pode preencher valores NaN com uma constante, como 0 ou "Unknown", ou com um valor calculado, como a média ou mediana da coluna.
Vamos modificar nosso arquivo main.py. Em vez de apenas imprimir o DataFrame com linhas removidas, agora limparemos nosso DataFrame principal df preenchendo os valores ausentes. Preencheremos a age ausente com a média das idades existentes e a city ausente com a string 'Unknown'.
Remova o código dropna() que você adicionou na última etapa e substitua-o pelo seguinte código. Usamos inplace=True para modificar o DataFrame diretamente.
## Replace the dropna() code with this at the end of main.py
## Calculate the mean of the 'age' column
mean_age = df['age'].mean()
## Fill missing values using the recommended approach to avoid FutureWarnings
df.fillna({'age': mean_age, 'city': 'Unknown'}, inplace=True)
print("\nDataFrame after filling missing values:")
print(df)
O argumento inplace=True modifica o DataFrame no local, o que significa que você não precisa atribuir o resultado de volta a uma variável (por exemplo, df = df.fillna(...)).
Salve o arquivo e execute-o no terminal:
python3 main.py
Você verá que os valores NaN foram substituídos. A idade de Eva agora é a média das outras idades, e a cidade de Frank é 'Unknown'.
## ... (original DataFrame output) ...
DataFrame after filling missing values:
name age city SALARY_IN_USD
0 Alice 25.0 New York 50000
1 Bob 30.0 Los Angeles 60000
2 Charlie 35.0 New York 70000
3 David 40.0 Chicago 80000
4 Alice 25.0 New York 50000
5 Eva 33.3 Boston 90000
6 Frank 45.0 Unknown 100000
Nota: A idade média é (25+30+35+40+25+45)/6 = 33.33.... Pandas preencherá NaN com este valor. A saída acima mostra 35.0 para simplificar; sua saída real para a idade de Eva será a média calculada.
Remover linhas duplicadas com drop_duplicates
Nesta etapa, você aprenderá como remover linhas duplicadas do seu DataFrame. Dados duplicados podem distorcer análises e levar a resultados incorretos. O método drop_duplicates() ajuda a identificá-los e removê-los.
Em nosso conjunto de dados original, a linha de 'Alice' aparece duas vezes com exatamente as mesmas informações. Agora que lidamos com valores ausentes, nossa próxima tarefa de limpeza é remover essa entrada duplicada.
Por padrão, drop_duplicates() considera uma linha duplicada se todos os seus valores de coluna forem idênticos aos valores de outra linha.
Adicione o seguinte código ao final do seu script main.py. Continuaremos a usar inplace=True para modificar nosso DataFrame.
## Add this to the end of main.py
df.drop_duplicates(inplace=True)
print("\nDataFrame after dropping duplicates:")
print(df)
Salve o arquivo e execute-o no terminal:
python3 main.py
A saída agora mostrará um DataFrame com apenas 6 linhas, pois uma das linhas de 'Alice' foi removida.
## ... (previous output) ...
DataFrame after dropping duplicates:
name age city SALARY_IN_USD
0 Alice 25.0 New York 50000
1 Bob 30.0 Los Angeles 60000
2 Charlie 35.0 New York 70000
3 David 40.0 Chicago 80000
5 Eva 33.3 Boston 90000
6 Frank 45.0 Unknown 100000
Observe que o índice 4 agora está faltando, o que corresponde à linha duplicada que foi removida. O DataFrame agora tem 6 linhas únicas.
Renomear colunas usando o método rename
Nesta etapa, você aprenderá como renomear colunas. Nomes de colunas consistentes e claros são essenciais para a legibilidade e manutenibilidade do código. É uma prática comum usar uma convenção de nomenclatura consistente, como tudo em minúsculas com underscores.
Nosso DataFrame tem uma coluna chamada SALARY_IN_USD. Vamos renomeá-la para um nome mais simples e em minúsculas: salary. O método rename() é perfeito para isso. Você passa um dicionário para o argumento columns, onde as chaves são os nomes antigos e os valores são os novos nomes.
Adicione o seguinte código ao final do seu script main.py:
## Add this to the end of main.py
df.rename(columns={'SALARY_IN_USD': 'salary'}, inplace=True)
print("\nDataFrame after renaming columns:")
print(df)
Salve o arquivo e execute-o no terminal:
python3 main.py
Você verá que a coluna SALARY_IN_USD foi renomeada com sucesso para salary.
## ... (previous output) ...
DataFrame after renaming columns:
name age city salary
0 Alice 25.0 New York 50000
1 Bob 30.0 Los Angeles 60000
2 Charlie 35.0 New York 70000
3 David 40.0 Chicago 80000
5 Eva 33.3 Boston 90000
6 Frank 45.0 Unknown 100000
Essa simples alteração torna o nome da coluna mais fácil de digitar e segue um guia de estilo comum do Python.
Converter tipos de coluna com astype
Nesta etapa final, você aprenderá como converter o tipo de dado de uma coluna. Tipos de dados corretos são cruciais para realizar cálculos e para a eficiência de memória.
Se você observar a saída inicial de df.info(), notará que a coluna SALARY_IN_USD tinha um Dtype de object, o que significa que ela estava armazenando os números como strings. Não podemos realizar operações matemáticas (como calcular o salário médio) em strings. Precisamos converter essa coluna para um tipo numérico, como int (inteiro).
O método astype() é usado para esse propósito. Vamos converter nossa nova coluna salary para o tipo int.
Adicione o seguinte código ao final de main.py. Também imprimiremos as informações do DataFrame novamente para confirmar a mudança.
## Add this to the end of main.py
df['salary'] = df['salary'].astype(int)
print("\nDataFrame after converting data types:")
print(df)
print("\nFinal DataFrame Info:")
df.info()
Salve o arquivo e execute-o pela última vez:
python3 main.py
A saída final mostrará o DataFrame limpo e suas novas informações. Observe atentamente o Dtype da coluna salary na saída de informações. Agora deve ser int64, não object.
## ... (previous output) ...
DataFrame after converting data types:
name age city salary
0 Alice 25.0 New York 50000
1 Bob 30.0 Los Angeles 60000
2 Charlie 35.0 New York 70000
3 David 40.0 Chicago 80000
5 Eva 33.3 Boston 90000
6 Frank 45.0 Unknown 100000
Final DataFrame Info:
<class 'pandas.core.frame.DataFrame'>
Index: 6 entries, 0 to 6
Data columns (total 4 columns):
## Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 6 non-null object
1 age 6 non-null float64
2 city 6 non-null object
3 salary 6 non-null int64
dtypes: float64(1), int64(1), object(2)
memory usage: 240.0+ bytes
Com a coluna salary como um tipo inteiro, você agora pode realizar cálculos como df['salary'].mean().
Resumo
Parabéns por completar o laboratório Pandas Basic Data Cleaning! Você transformou com sucesso um conjunto de dados bruto e desorganizado em um formato limpo e pronto para análise.
Neste laboratório, você aprendeu e praticou várias técnicas essenciais de limpeza de dados no Pandas:
- Tratamento de Valores Ausentes: Você viu como remover linhas com
NaNusandodropna()e como preenchê-las com dados significativos usandofillna(). - Remoção de Duplicatas: Você usou
drop_duplicates()para eliminar linhas redundantes do seu conjunto de dados. - Renomeação de Colunas: Você aprendeu a tornar os nomes das colunas mais consistentes e legíveis com o método
rename(). - Conversão de Tipos de Dados: Você usou
astype()para alterar o tipo de dado de uma coluna para o formato correto, permitindo análises adicionais.
Essas habilidades fundamentais são os blocos de construção para qualquer trabalho sério com dados. Dominá-las permitirá que você enfrente com confiança desafios de dados do mundo real. Continue praticando essas técnicas para se tornar proficiente em manipulação de dados com Pandas.



