Bibliotecas de Dados
Pandas
A biblioteca pandas é uma biblioteca de código aberto para manipulação e análise de dados em Python. Ela fornece estruturas de dados eficientes, como DataFrames e Series, que facilitam a leitura, processamento e análise de grandes volumes de dados de forma intuitiva.
Principais métodos do pandas:
| Método | Descrição | Exemplo de uso |
|---|---|---|
head(n) |
Retorna as primeiras n linhas do DataFrame (padrão = 5) |
df.head(3) |
tail(n) |
Retorna as últimas n linhas do DataFrame |
df.tail(3) |
info() |
Mostra um resumo conciso: colunas, tipos de dados e valores não nulos | df.info() |
describe() |
Gera estatísticas descritivas para colunas numéricas | df.describe() |
shape |
Retorna uma tupla com o número de linhas e colunas | df.shape |
columns |
Retorna os nomes das colunas | df.columns |
dtypes |
Retorna os tipos de dados das colunas | df.dtypes |
isnull() |
Verifica valores nulos em cada célula | df.isnull() |
dropna() |
Remove linhas com valores nulos | df.dropna() |
fillna(valor) |
Substitui valores nulos por um valor especificado | df.fillna(0) |
value_counts() |
Conta ocorrências únicas em uma coluna (usado com Series) |
df['coluna'].value_counts() |
groupby(coluna) |
Agrupa dados com base em uma ou mais colunas | df.groupby('categoria') |
sort_values(by) |
Ordena os dados com base em uma ou mais colunas | df.sort_values('idade') |
loc[] |
Acessa linhas e colunas por rótulo | df.loc[0, 'nome'] |
iloc[] |
Acessa linhas e colunas por posição | df.iloc[0, 1] |
drop(labels) |
Remove colunas ou linhas | df.drop('coluna', axis=1) |
rename() |
Renomeia colunas ou índices | df.rename(columns={'a': 'A'}) |
apply(func) |
Aplica uma função a cada elemento/linha/coluna | df['coluna'].apply(len) |
Instalar Pandas
$ pip install pandas
| Exemplo Arquivos CSV e PANDAS
Leve em consideração um CSV de clima com as colunas day, temp, condition.
import csv
with open("clima_data.csv") as data_file:
data = csv.reader(data_file)
temperature = []
for row in data:
if row[1] != "temp":
temperature.append(row[1])
print(temperature)
Biblioteca para trabalhar com dados em CSV. Exemplo mostra as temperaturas sem mostrar o nome da coluna: temp
import pandas
data = pandas.read_csv("clima_data.csv")
print(data["temp"]) #imprime qualquer coluna desejada
# print(data) # Caso desejasse imprimir a tabela toda
No pandas o processo de leitura fica muito mais simplificado.
import pandas
data = pandas.read_csv("clima_data.csv")
print(data.to_dict(), '\n') # Converte em um dicionário.
print(data["temp"].to_list(), '\n') # Converte em uma lista.
print(data.temp.to_list() )# O panda converte cada coluna em atributo, mesmo resultado acima
print(data["temp"].mean(), '\n') # Retorna a media de valores da coluna/lista
print(data["temp"].max(), '\n') # Retorna o maior valor da coluna/list
print(data[data.day == "Monday"]) # Retornar a linha da tabela
print(data[data.temp == data.temp.max()]) # Retornar a linha da tabela com o maior valor da coluna temp
print(data[data.temp == data.temp.max()].temp.item()) # imprime apenas o resultado sem dados adicionais
# Criar um Dataframe a partir de um dicionário
students_data = {
"students": ["Alice", "Bob", "Charlie"],
"scores": [85, 90, 78]
}
data = pandas.DataFrame(students_data)
print(data)
# Exporto para um arquivo CSV, index indica se quer salvar o índice em cada linha
data.to_csv("pontuacao_alunos.csv", index=false)
# O parâmetro orient="records" do to_dict() converte um Dataframe em uma lista de dicionários, onde cada dicionário é uma linha da tabela/Dataframe
print(data.to_dict(orient="records")) # Saída: [{'students': 'Alice', 'scores': 85}, {students': 'Bob'...}]
Para obter o valor de uma linha basta fazer uma condição
import pandas as pd
# Leitura de um CSV simples
df1 = pd.read_csv("dados.csv")
# Usando separador personalizado
df2 = pd.read_csv("dados.csv", sep=";")
# Definindo a linha do cabeçalho
df3 = pd.read_csv("dados.csv", header=0)
# Definindo uma coluna como índice
df4 = pd.read_csv("dados.csv", index_col="ID")
# Renomeando colunas (ignorando cabeçalho do arquivo)
df5 = pd.read_csv("dados.csv", names=["Coluna1", "Coluna2", "Coluna3"], header=None)
# Lendo colunas específicas
df6 = pd.read_csv("dados.csv", usecols=["Nome", "Idade"])
# Definindo tipos de dados
df7 = pd.read_csv("dados.csv", dtype={"Idade": int})
# Convertendo datas
df8 = pd.read_csv("dados.csv", parse_dates=["Data"])
# Tratando valores nulos personalizados
df9 = pd.read_csv("dados.csv", na_values=["", "NA", "null"])
# Pulando linhas no início
df10 = pd.read_csv("dados.csv", skiprows=2)
# Limitando número de linhas lidas
df11 = pd.read_csv("dados.csv", nrows=5)
# Especificando codificação
df12 = pd.read_csv("dados.csv", encoding="utf-8")
# Exemplo com Excel
df13 = pd.read_excel("planilha.xlsx", sheet_name=0, usecols="A:C", header=0)
# Exibindo os primeiros registros
print(df1.head())
import pandas as pd
from pathlib import Path
NOME_PLANILHA = "clientes.xlsx"
caminho_planilhas_separadas = Path(__file__).parent / 'separada'
nomes_abas = pd.ExcelFile(NOME_PLANILHA).sheet_names
planilha_cliente = pd.read_excel(NOME_PLANILHA)
for aba in nomes_abas:
aba_atual = pd.read_excel(NOME_PLANILHA, sheet_name=aba)
aba_atual.to_excel(caminho_planilhas_separadas/f'{aba}.xlsx', index=False)
# metodo 2
planilha_cliente2 = pd.read_excel(NOME_PLANILHA, sheet_name=None)
for nome_aba, tabela in planilha_cliente2.items():
tabela.to_excel(caminho_planilhas_separadas/f'{nome_aba}.xlsx', index=False)
# Juntando planilhas em varias abas
with pd.ExcelWriter('clientes_juntos.xlsx') as consolidada:
for arquivo in caminho_planilhas_separadas.glob('*.xlsx'):
tabela = pd.read_excel(arquivo)
tabela.to_excel(consolidada, sheet_name=arquivo.stem, index=False)
Usando o parametro sheet_name=None na leitura da planilha já retorna um dicionário com todas as abas com nome da aba e os dados dela.
| Exemplo sem e com Iterrows
O método iterrows() vem embutido no pandas e é uma maneira facilitada de percorrer as linhas de um Dataframe.
import pandas
student_dict = {
"name": ["Peter", "Carol", "John"],
"score": [90, 85, 95],
}
student_data_frame = pandas.DataFrame(student_dict)
for key, value in student_data_frame.items():
print(key)
print(value)
Exemplo descreve como percorrer com loop em um dataframe do pandas, que funciona como um dicionário.
import pandas
student_dict = {
"name": ["Peter", "Carol", "John"],
"score": [90, 85, 95],
}
student_data_frame = pandas.DataFrame(student_dict)
for index, row in student_data_frame.iterrows():
print(index) # Saída: 0, 1, 2
print(row) # Saída: name Peter score 90 ...
print(row.name) # Apenas a coluna nome
Cada linha é uma serie do objeto dataframe.
Json
Json em Python é um módulo embutido que permite trabalhar com dados no formato JSON (JavaScript Object Notation). O JSON é um formato leve e amplamente utilizado para armazenar e transmitir dados entre sistemas.
Serialização e Deserialização de arquivos JSON em Python.
import json
dados_string = '''{
"alunos":
[{"nome": "Ricardo", "idade": 15, "aprovado": true}]
}
'''
# Conversão simples de string para dict
dados_convertidos_em_dict = json.loads(dados_string)
# Converte um objeto python em uma string mas formatada como json
dados_em_json = json.dumps(dados_convertidos_em_dict, indent=2)
# Criando um dicionário Python com uma lista de pessoas
dados = {"pessoas": [{"nome": "Alice", "idade": 25, "cidade": "São Paulo"}]}
novo_dado = {"nome": "Bob", "idade": 30, "cidade": "Rio de Janeiro"}
# Salvando o JSON inicial
with open("dados.json", "w") as arquivo:
json.dump(dados, arquivo, indent=4)
# Lendo os dados do arquivo JSON
with open("dados.json", "r") as arquivo:
dados_do_arquivo = json.load(arquivo)
# Adicionando um novo item à lista
dados_do_arquivo["pessoas"].append(novo_dado)
# Salvando os dados atualizados no arquivo
with open("dados.json", "w") as arquivo:
json.dump(dados_do_arquivo, arquivo, indent=4)
# Exibindo os dados atualizados
print("Dados atualizados:", dados_do_arquivo)
indent é o numero de espaço para identação entre os dados.
pickle
A biblioteca pickle no Python é usada para salvar objetos em arquivos e recuperá-los depois — ou seja, ela serializa e desserializa objetos Python. pickle é ultil para salvar o estado de um programa. Armazenar modelos treinados em machine learning. Trocar objetos entre programas Python. Guardar dados de forma rápida e fácil.
Arquivos Pickle (.pkl) em Python podem salvar o estado completo de instâncias de objetos, incluindo seus atributos, de modo que você possa "congelar" e restaurar esses objetos posteriormente. A biblioteca pickle faz isso serializando e desserializando objetos Python para/desde um formato binário.
🆚 Comparando com outras formas de salvar:
| Formato | Legível por humanos? | Salva qualquer objeto? | Segurança |
|---|---|---|---|
pickle |
❌ | ✅ | ⚠️ |
json |
✅ | ❌ (apenas tipos básicos) | ✅ |
csv |
✅ | ❌ (apenas tabelas) | ✅ |
import pickle
# --- EXEMPLO SALVANDO (SERIALIZANDO) OBJETO --- #
dados = {'nome': 'Diogo', 'idade': 30}
# Abre o arquivo em modo binário para escrita
with open('dados.pkl', 'wb') as f:
pickle.dump(dados, f)
# --- DESERIALIZANDO OBJETO SALVO --- #
import pickle
# Abre o arquivo em modo binário para leitura
with open('dados.pkl', 'rb') as f:
dados_carregados = pickle.load(f)
print(dados_carregados)
# Saída: {'nome': 'Diogo', 'idade': 30}
import pickle
# Classe simples com um estado (atributo)
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def apresentar(self):
print(f"Olá, meu nome é {self.nome} e tenho {self.idade} anos.")
# Instância da classe
p1 = Pessoa("João", 30)
# ✅ Salvando o objeto em um arquivo .pkl
with open("pessoa.pkl", "wb") as f:
pickle.dump(p1, f) # Serializa e grava a instância no arquivo
# ❌ "Deleta" a instância da memória para simular novo uso
del p1
# ✅ Lendo o objeto de volta do arquivo
with open("pessoa.pkl", "rb") as f:
p1_restaurado = pickle.load(f) # Desserializa o objeto
# Usando o objeto restaurado
p1_restaurado.apresentar() # Saída: Olá, meu nome é João e tenho 30 anos.
openpyxl
A biblioteca openpyxl é uma biblioteca externa Python usada para ler, escrever e manipular arquivos do Excel no formato .xlsx (Excel 2007 ou superior).
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws["A1"] = "Nome"
ws["B1"] = "Idade"
ws.append(["Maria", 30])
ws.append(["João", 25])
wb.save("dados.xlsx")
Esse código cria um arquivo Excel chamado dados.xlsx com duas colunas e dois registros.
xml.dom.minidom
xml.dom.minidom é uma biblioteca padrão do Python para ler, analisar e manipular arquivos XML usando o modelo DOM. Ela permite tratar o XML como uma estrutura de árvore, onde você pode navegar e modificar elementos como se fossem objetos Python.
# Importa o módulo xml.dom.minidom, que permite manipular arquivos XML como uma árvore DOM (Document Object Model)
import xml.dom.minidom
# Importa a biblioteca Path do pathlib para manipulação de caminhos de forma segura e multiplataforma
from pathlib import Path
# Obtém o caminho da pasta onde está localizado o script atual
pasta_atual = Path(__file__).parent
# Lê e faz o parse (análise) do arquivo XML localizado em xmls/livros.xml e transforma em um objeto DOM
domtree = xml.dom.minidom.parse(str(pasta_atual / 'xmls' / 'livros.xml'))
# Obtém o elemento raiz do documento (por exemplo: <catalogo>, <livros>, etc.)
group = domtree.documentElement
# Busca todos os elementos com a tag <livro> dentro do XML e os armazena em uma lista
livros = group.getElementsByTagName('livro')
# Percorre cada elemento <livro> encontrado no XML
for livro in livros:
# Acessa o valor de texto da tag <titulo> dentro do <livro>
titulo = livro.getElementsByTagName('titulo')[0].childNodes[0].nodeValue
# Acessa o valor de texto da tag <autor> dentro do <livro>
autor = livro.getElementsByTagName('autor')[0].childNodes[0].nodeValue
# Imprime o título e o autor do livro
print('Titulo', titulo, '| Autor', autor)
# Modifica o valor da tag <autor> do primeiro livro da lista
livros[0].getElementsByTagName('autor')[0].childNodes[0].nodeValue = 'Soares, Adriano'
# Abre (ou cria) um novo arquivo XML para escrita com o nome livros_copia.xml na mesma pasta
with open(pasta_atual / 'xmls' / 'livros_copia.xml', 'w') as f:
# Escreve todo o conteúdo do DOM (com a alteração feita) no novo arquivo XML
domtree.writexml(f)