Operações de IO no Pandas: Leitura e Escrita de Arquivos
As operações de entrada e saída (IO) no Pandas são fundamentais para trabalhar com diversos formatos de arquivos, incluindo EXCEL, CSV, JSON e bancos de dados.
1. Trabalhando com arquivos CSV: função pd.read_csv()
Arquivos CSV (Comma-Separated Values) são estruturados em linhas, onde os dados são separados por vírgulas.
import pandas as pd
dados_cidades = pd.read_csv("cidades.csv")
print(dados_cidades)
# Saída
ana 23 São Paulo
0 carlos 25 Rio de Janeiro
1 maria 28 Belo Horizonte
print(type(dados_cidades)) # Na verdade, é um DataFrame
A função pd.read_csv() possui um parâmetro chamado sep, que por padrão é uma vírgula, já que este é o separador padrão de arquivos CSV.
Ao observar a saída do objeto dados_cidades, notamos que a linha com "ana", "23" e "São Paulo" tornou-se o cabeçalho das colunas; os índices das linhas usam os valores padrão 0, 1, conforme mostrado:
print(dados_cidades.columns)
# Saída
Index(['ana', '23', 'São Paulo'], dtype='object')
print(dados_cidades.index)
# Saída
RangeIndex(start=0, stop=2, step=1)
Essa estrutura de rótulos não é ideal: os dados de ana foram tratados como rótulos de colunas porque o Pandas por padrão usa a primeira linha como cabeçalho; seria mais lógico usar a primeira coluna (nomes) como índice.
Na função pd.read_csv(), o parâmetro header controla os rótulos das colunas, enquanto index_col define qual coluna do arquivo será usada como índice.
Se definirmos header=None, os rótulos das colunas serão números sequenciais. Para definir rótulos personalizados, podemos usar o parâmetro names. Já index_col=0 indica que a primeira coluna deve ser usada como índice, como mostrado:
dados_cidades = pd.read_csv("cidades.csv", header=None, index_col=0)
print(dados_cidades)
# Saída
1 2
0
ana 23 São Paulo
carlos 25 Rio de Janeiro
maria 28 Belo Horizonte
print(dados_cidades.columns)
# Saída
Index([1, 2], dtype='int64')
print(dados_cidades.index)
# Saída
Index(['ana', 'carlos', 'maria'], dtype='object', name=0)
A função pd.read_csv() também pode ler arquivos de texto, bastando ajustar o parâmetro sep para o delimitador correto.
2. Manipulando arquivos Excel: função pd.read_excel()
planilha = pd.read_excel("dados_empresa.xlsx")
print(planilha)
A função read_excel() é bastante similar à read_csv():
planilha = pd.read_excel("dados_empresa.xlsx", index_col=0)
print(planilha)
print(planilha.shape)
Por padrão, ao trabalhar com arquivos Excel contendo múltiplas plnailhas, apenas a primeira é lida. Podemos especificar qual planilha desejar usando o parâmetro sheet_name:
# Lendo planilha pelo nome
planilha = pd.read_excel("dados_empresa.xlsx", index_col=0, sheet_name="Funcionários")
print(planilha)
# Lendo planilha pelo índice (primeira planilha)
planilha = pd.read_excel("dados_empresa.xlsx", index_col=0, sheet_name=0)
print(planilha)
# Lendo outra planilha pelo nome
planilha = pd.read_excel("dados_empresa.xlsx", index_col=0, sheet_name="Produtos")
print(planilha)
# Lendo outra planilha pelo índice (segunda planilha)
planilha = pd.read_excel("dados_empresa.xlsx", index_col=0, sheet_name=1)
print(planilha)
Para escrever dados em arquivos, o processo é similar para CSV:
# Escrevendo em Excel
planilha.to_excel("relatorio_final.xlsx")
Em algumas situações, podemos combinar as ferramentas nativas de manipulação de arquivos do Python com as operações de IO do Pandas:
# Abrindo o arquivo com open() e definindo errors="ignore" para ignorar erros
arquivo = open("dados.csv", "r", encoding="utf-8", errors="ignore")
# Em seguida, usando pd.read_csv() para ler o arquivo,
# passando diretamente o objeto de arquivo aberto
meus_dados = pd.read_csv(arquivo, sep=";")