Pular para o conteúdo

Dados: e o pandas?

Arcane.Quadro, os seis verbos, e quando chamar o pandas de dentro — com a fronteira dita sem rodeio.

Há duas respostas, e escolher entre elas é uma decisão de tamanho, não de gosto.

A tabela de dados da linguagem#

dataforge
adopt Arcane.Quadro as Q

vendas := Q.de_vaults([
    {"loja": "centro", "mes": "jan", "valor": 1200},
    {"loja": "centro", "mes": "fev", "valor": 1500},
    {"loja": "praia",  "mes": "jan", "valor": 900},
    {"loja": "praia",  "mes": "fev", "valor": 1100}])

// A forma e {coluna: agregacao}. Com mais de uma, a coluna de saida
// vira 'coluna_agregacao' — e a lista de agregacoes e FECHADA: um nome
// desconhecido e recusado com a lista do que existe, porque ele pode
// vir de um '?agregar=' de uma tela.
resumo := vendas
    >> onde valor bigger 1000
    >> agrupar "loja"
    >> resumir {"valor": ["soma", "contagem"]}

assert len(resumo) is 2
cycle linha in resumo:
    out $"{linha["loja"]}: {linha["valor_soma"]} em {linha["valor_contagem"]} mes(es)"

onde, pegar, sem, ordenar, agrupar e resumir são operações do >> — e não são palavras reservadas: agrupar e ordenar são nomes bons demais para tirar de quem escreve. O parser as reconhece só logo depois de um >>.

Cinco decisões que explicam o resto#

DecisãoPorque
a linha é um vaulté o que IO.read_csv(c, yes) e Database.query já devolvem
por dentro é colunardescrever e correlacao viram uma passada por coluna
todo verbo devolve um quadro novoo pipeline fica reexecutável, como record/with
a ausência tem um nome sóvoid, texto vazio e NaN são a mesma coisa — separá-los é metade do bug de limpeza
coluna que não existe é erro, com sugestãodevolver coluna vazia calada é o jeito mais rápido de um relatório sair errado

Quando chamar o pandas#

adopt Python.pandas as pd traz a biblioteca inteira, e a ponte não converte: um DataFrame continua um DataFrame, e df["b"].sum() é o código do pandas rodando — não um laço daqui. Isso funciona porque o interpretador trata objeto estranho por protocolo: membro, método, índice, len, iteração, aritmética e verdade já passavam assim.

O exemplo abaixo usa um módulo da biblioteca do próprio Python, que existe em toda instalação — com o pandas seria idêntico, e este bloco roda na verificação da documentação:

dataforge
adopt Python.statistics as st

notas := [7.0, 8.5, 6.0, 9.5]
assert st.mean(notas) is 7.75
out $"media {st.mean(notas)}, mediana {st.median(notas)}"
Use o Quadro quandoUse o pandas quando
o dado cabe na memória com folgasão milhões de linhas e você precisa de vetorização
você quer zero dependênciao ambiente já tem a pilha científica
o resultado vai para a Vitrine ou para um relatóriovocê vai encadear com scikit-learn, statsmodels…
o programa roda em rede fechadahá espaço para instalar