Criação de Dataframes com Pandas
Tags: python, pandas, beginners, datascience
Published: 2024-02-20 14:10:03

Antes de iniciar qualquer outra etapa em um projeto de dados, é necessário realizar primeiro o carregamento da base para o ambiente que estamos trabalhando. Portanto, neste artigo iremos destacar os principais métodos de importação da base com o pandas.

A sintaxe de leitura de arquivos no pandas é bastante intuitivo, sendo que o início de suas funções começam com "read_" e o complemento virá da extensão do arquivo a ser carregado.

## CSV (comma separated values)

O arquivo ".csv" é um dos formatos mais comuns que se encontra na internet, para realizar essa importação, basta utilizar a função "read_csv", passar o caminho do arquivo e, para o contexto brasileiro, necessitamos nos atentar a 3 parâmetros em particular:

- _sep_: O tipo de separador de colunas -> _default_ = ","
(apesar do padrão ser a vírgula, podemos encontrar outros tipos de separadores, como ";" ou "|" etc.) 
- _decimal_: O tipo de separador de casas decimais -> _default_ = "."
(nos EUA o padrão ".", enquanto no Brasil é a ",")
- _encoding_: Codificação de caracteres (cada país possui uma lista de caracteres que podem não existir em outros países, como o "ç" que não existe na língua inglesa) 

```
pd.read_csv(
    "https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/latest/owid-covid-latest.csv",
    decimal=",",
    encoding="utf-8"
)
```

## Excel

Outra forma de importarmos uma base é quando se encontra no formato de arquivos excel ".xlsx", nesse caso iremos usar a função "read_excel" do pandas.
Para esse tipo de formato, também devemos nos atentar aos seguintes parâmetros:

- _decimal_: O tipo de separador de casas decimais -> _default_ = "."- _skiprows_: Quantidade de linhas que devemos pular no arquivo excel (pode acontecer de as colunas iniciarem a partir da 5 linha no excel, nesse caso iremos configurar **skiprows=4**)
- _sheet_name_: Especificar o nome de qual sheet o pandas deverá ler (em caso de mais de um sheet no arquivo excel)

```
pd.read_excel(
    "https://github.com/FBosler/Medium-Data-Extraction/blob/master/invoices.xlsx?raw=true",
    skiprows=2,
    sheet_name="Sheet 2"
)
```
## Parquet

Este formato é comum de ser visto em cenários de Big Data, pois é uma extensão que consegue reduzir drásticamente o tamanho do arquivo original para que seja viável de se manipular no pandas.
Podemos acessar subdivisões da base original através de um filtro, por exemplo:

```
pd.read_parquet("file.parquet", filters=[("ANO", "=", 2020)])
```

Não irei aprofundar, pois em outro post irei trazer mais detalhes deste tipo de extensão.

## ZIP

É bastante comum os arquivos originais estarem em pastas compactadas em formato ".zip" ou alguma outra extensão, nesse caso devemos utilizar outra biblioteca chamada ZipFile que irá nos ajudar a descompactar para poder aplicar os métodos do pandas para carregamento da base.

```
with zipfile.ZipFile(f"data/file.zip") as z:
    df = pd.read_csv(
        z.open("file.csv"),
        sep="|",
        encoding="latin-1",
        decimal="."
)
```

Outro caso comum é de acessar arquivos zipados diretamente da web sem precisar estar armazenado no seu HD, porém o pandas não vai conseguir lê-lo diretamente, para realizar essa importação, devemos utilizar mais 4 bibliotecas, sendo elas: 

- _request_: Realiza a requisição de conteúdos diretamente na web
- _io_: Permite criar buffers para armazenar dados temporariamente na memória antes de serem escritos em um arquivo ou outra fonte de saída.
- _ZipFile_: Realizar a descompactação do arquivo.
- _pandas_: Para realizar o carregamento da base.

```
resposta = requests.get("https://download.inep.gov.br/dados_abertos/microdados_censo_escolar_2022.zip")
buffer = BytesIO(initial_bytes=resposta.content)
with zipfile.ZipFile(buffer) as z:
    df = pd.read_csv(
         z.open("/Microdados do Censo Escolar da Educação Básica 2022/dados/microdados_ed_basica_2022.csv"),
         sep="|", 
         encoding="latin-1",
         decimal=",")
```

## Diretamente no pandas

Por fim, porém não menos importante, podemos criar dataframes diretamente do pandas, para isso podemos passar:

- _data_: Os dados que irão compor o dataframe
- _columns_: Os nomes das colunas 
- _index_: Se for preciso personalizar o índice do dataframe

```
pd.DataFrame(
    data=np.random.randint(low=0, high=10, size=(5, 5)),
    columns=["Matemática", "Português", "História", "Geografia", "Física"],
    index=["Pedro", "Maria", "João", "Mateus", "Lucas"]
)
```

Esses são os principais métodos que iremos encontrar no dia a dia ao carregar uma base para analisar, porém lembre-se de consultar a documentação do pandas sempre que estiver com dúvidas de alguma função.

O mais importante, a prática irá te levar a experiência com os diversos tipos de importação e seus respectivos métodos.