Lab de Programação / Ciência da Computação
Conceitos essenciais, fluxo de trabalho, e operações fundamentais em Pandas — com syntax highlighting
# ambiente recomendado
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install pandas matplotlib pyarrow # (opcional: jupyter)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
pd.__version__
int, floatdatetime)s = pd.Series([10, 20, 30], index=["a","b","c"])
df = pd.DataFrame({
"aluno": ["Ana","João","Bia"],
"nota": [9.1, 7.5, 8.3],
"aprovado": [True, False, True]
})
s, df.head()
df = pd.read_csv("dados.csv") # CSV
df = pd.read_excel("planilha.xlsx") # Excel
df = pd.read_json("dados.json") # JSON
df = pd.read_parquet("tabela.parquet") # Parquet (rápido)
df.to_csv("saida.csv", index=False)
df.to_excel("saida.xlsx", index=False)
df.to_parquet("saida.parquet")
df.head() # primeiras linhas
df.tail() # últimas linhas
df.shape # (linhas, colunas)
df.columns # nomes das colunas
df.info() # tipos e nulos
df.describe(numeric_only=True)
df.dtypes
df["data"] = pd.to_datetime(df["data"], dayfirst=True, errors="coerce")
df["categoria"] = df["categoria"].astype("category")
df["preco"] = pd.to_numeric(df["preco"], errors="coerce")
# colunas
df["nota"] # Series
df[["aluno","nota"]].head(3) # DataFrame
# linhas por rótulo/posição
df.loc[0:3, ["aluno","nota"]] # rótulos
df.iloc[0:3, 0:2] # posições
aprovados = df[df["nota"] >= 7.0]
filtro = (df["nota"] >= 7) & (df["categoria"] == "A")
resultado = df.loc[filtro, ["aluno","nota","categoria"]]
df.isna().sum()
df2 = df.fillna({"nota": df["nota"].mean()})
df3 = df.dropna(subset=["nota","aluno"])
df["nota_pad"] = (df["nota"] - df["nota"].mean()) / df["nota"].std()
df["status"] = np.where(df["nota"] >= 7, "Aprovado", "Reprovado")
# estatísticas por categoria
grp = df.groupby("categoria")["nota"]
resumo = grp.agg(["count","mean","std","min","max"]).reset_index()
resumo.sort_values("mean", ascending=False)
Use .agg() para múltiplas métricas; .transform() para adicionar resultados por linha.
# tabela dinâmica
pv = pd.pivot_table(
df, values="nota", index="categoria", columns="turma",
aggfunc="mean", fill_value=0
)
# frequência cruzada
xt = pd.crosstab(df["turma"], df["status"], normalize="index")
top = df.sort_values(["nota","aluno"], ascending=[False, True]).head(10)
alunos = pd.DataFrame({"id":[1,2], "aluno":["Ana","João"]})
notas = pd.DataFrame({"id":[1,1,2], "disc":["Mat","Fis","Mat"], "nota":[9,8,7]})
dfm = pd.merge(alunos, notas, on="id", how="left") # inner/left/right/outer
part1 = df.iloc[:100]
part2 = df.iloc[100:]
df_full = pd.concat([part1, part2], axis=0, ignore_index=True)
df["data"] = pd.to_datetime(df["data"])
df = df.set_index("data").sort_index()
mensal = df["nota"].resample("M").mean() # A, Q, M, W, D...
rolling = df["nota"].rolling(7).mean() # média móvel 7 períodos
ax = mensal.plot(kind="line", marker="o", figsize=(7,3), grid=True)
ax.set_title("Média Mensal da Nota")
plt.tight_layout(); plt.show()
categorical para colunas com poucos valores distintos.parquet) e chunks na leitura.df.memory_usage(deep=True) para medir memória.fillna/dropna.describe).info(), describe().receita = qtd * preco).