Pular para o conteúdo

    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):

    Terminal
    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.

    ambiente/cap02_instalacao_e_dados.pylinhas 10 a 12
    import pandas as pd
    
    print(int(pd.__version__.split(".")[0]) >= 3)
    
    Saída
    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.

    ambiente/cap02_instalacao_e_dados.pylinhas 14 a 15
    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:

    ambiente/cap02_instalacao_e_dados.pylinhas 20 a 21
    df = pd.read_csv("dados/funcionarios_15.csv")
    print(df.head(6))
    
    Saída
       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
    
    ColunaO que éTipo esperado
    id_funcionarioIdentificador do funcionárioInteiro
    nomeNome completoTexto
    departamentoEngenharia, Marketing, Finanças, Ciência de Dados ou RHTexto
    cidadeOnde trabalhaTexto
    idadeIdade em anosNúmero
    salarioSalário mensal, em reaisNúmero
    experienciaAnos de experiênciaInteiro
    nota_desempenhoNota de 4 a 9Inteiro
    projetos_concluidosQuantidade de projetosInteiro
    data_admissaoData de entradaData

    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):

    ProblemaOnde está
    Salário escrito como texto (R$ 4650)Linhas 1 e 7, e isso transforma a coluna inteira em texto
    Salário ausenteLinhas 3 e 9
    Departamento ausenteLinha 8
    Texto sujo em departamento (engenharia, MARKETING)Linhas 2 e 5
    Cidade ausenteLinhas 4 e 11
    Idade ausenteLinha 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:

    ambiente/cap02_instalacao_e_dados.pylinha 26
    print(df.isna().sum())
    
    Saída
    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 pasta dados/.

    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.