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

bash
$ pip install pandas

| Exemplo Arquivos CSV e PANDAS

Leve em consideração um CSV de clima com as colunas day, temp, condition.

cvs_biblioteca.py
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

csv_pandas.py
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.

pandas.py
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

exemplos_atributos.py
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())
exemplo_separar_juntar_abas.py
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.

iterar_data_frame_pandas.py
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.

iterrows_no_pandas.py
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.

json.py
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)

 

pickle.py
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}
salvando_instancia_pickle.py
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).

openpyxl.py
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.

ler_escrever_xml.py
# 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)