Capítulo 2, Ambiente
Instalando, importando e conhecendo os dados
Dois comandos deixam o Pandas pronto. O resto do capítulo apresenta o conjunto de dados que vai acompanhar você por todo o nível Básico, com os seus defeitos.
Instalar e importar
O Pandas 3 exige Python 3.11 ou superior. Dentro de um ambiente virtual (como no curso de NumPy):
uv add pandas pyarrow openpyxl
O pyarrow acelera textos e dá suporte ao formato Parquet, e o openpyxl lê e grava arquivos do Excel. Para o Pandas, o apelido pd é uma convenção tão forte quanto np é para o NumPy: toda documentação e toda resposta na internet o assumem.
import pandas as pd
print(int(pd.__version__.split(".")[0]) >= 3)
True
Para o terminal mostrar tabelas largas sem quebrar as linhas, eu ajusto a largura de exibição. É só a apresentação: não muda nenhum dado.
pd.set_option("display.width", 170)
pd.set_option("display.max_columns", 20)
O conjunto de dados do nível Básico
Do capítulo 4 ao 15, eu uso o mesmo conjunto, de propósito: você nunca reaprende o que cada coluna significa, só o que fazer com ela. São 15 funcionários de uma empresa, em dados/funcionarios_15.csv. A primeira leitura honesta:
df = pd.read_csv("dados/funcionarios_15.csv")
print(df.head(6))
id_funcionario nome departamento cidade idade salario experiencia nota_desempenho projetos_concluidos data_admissao
0 101 Ana Souza Engenharia São Paulo 24.0 4500 1 4 2 2021-01-10
1 102 Bruno Lima Marketing Belo Horizonte 25.0 R$ 4650 2 5 3 2022-02-11
2 103 Carla Mendes engenharia Porto Alegre 26.0 4800 3 6 4 2023-03-12
3 104 Diego Rocha Ciência de Dados Rio de Janeiro 27.0 NaN 4 7 5 2024-04-13
4 105 Elisa Fernandes RH NaN 28.0 5100 5 8 6 2021-05-14
5 106 Felipe Araújo MARKETING São Paulo 29.0 5250 6 9 7 2022-06-15
| Coluna | O que é | Tipo esperado |
|---|---|---|
id_funcionario | Identificador do funcionário | Inteiro |
nome | Nome completo | Texto |
departamento | Engenharia, Marketing, Finanças, Ciência de Dados ou RH | Texto |
cidade | Onde trabalha | Texto |
idade | Idade em anos | Número |
salario | Salário mensal, em reais | Número |
experiencia | Anos de experiência | Inteiro |
nota_desempenho | Nota de 4 a 9 | Inteiro |
projetos_concluidos | Quantidade de projetos | Inteiro |
data_admissao | Data de entrada | Data |
Os problemas que estão escondidos
Este conjunto tem defeitos de propósito, e nenhum deles dá erro de leitura: o Pandas carrega tudo sem reclamar, e as contas rodam. Você só descobre se olhar. Eles são o assunto dos capítulos 9 e 10 (as linhas são contadas a partir de 0, como no índice do Pandas):
| Problema | Onde está |
|---|---|
Salário escrito como texto (R$ 4650) | Linhas 1 e 7, e isso transforma a coluna inteira em texto |
| Salário ausente | Linhas 3 e 9 |
| Departamento ausente | Linha 8 |
Texto sujo em departamento (engenharia, MARKETING) | Linhas 2 e 5 |
| Cidade ausente | Linhas 4 e 11 |
| Idade ausente | Linha 6 |
Funcionária repetida (mesmo id_funcionario, campos diferentes) | A linha 14 repete a linha 0 |
Uma contagem rápida mostra os ausentes sem precisar de uma linha de limpeza:
print(df.isna().sum())
id_funcionario 0
nome 0
departamento 1
cidade 2
idade 1
salario 2
experiencia 0
nota_desempenho 0
projetos_concluidos 0
data_admissao 0
dtype: int64
Repare que o salario mostra apenas 2 ausentes, e não 4: as duas linhas com R$ 4650 e R$ 5550 não são vazias para o Pandas, são textos. Esse é exatamente o tipo de problema que uma conta que "roda sem erro" esconde.
Os arquivos de dados
Os CSVs foram gerados por um script determinístico (
dados/gerar_dados.py), então a mesma execução produz sempre os mesmos arquivos. Se você apagar um por engano, rode o script de dentro da pastadados/.
Exercício 1
Conhecer antes de analisar
Carregue dados/funcionarios_15.csv e confira, com assert, que ele tem 15 linhas e 10 colunas, e que o id_funcionario 101 aparece duas vezes.