Noções Básicas de Análise de Dados
10 exemplos para você começar com Análise de Dados - 7 básicos e 3 intermediários.
Pré-requisitos
- Python 3.14.0 com pandas 2.2+ e NumPy instalados.
- Configuração rápida:
uv pip install "pandas>=2.2" "numpy>=2.0" "pyarrow>=18"
Exemplos Básicos
1. Criação de Array NumPy
Crie um array numérico homogêneo e execute matemática vetorizada.
import numpy as np
sales = np.array([120, 340, 280, 410], dtype=np.int32)
bonus = sales * 0.1
print(bonus.dtype, bonus.sum())- Arrays NumPy armazenam um dtype por eixo - misturar tipos força a coerção.
- Operações vetorizadas evitam loops Python e rodam em C compilado.
dtypecontrola memória e precisão - escolha-o deliberadamente.
Relacionado: Arrays NumPy - dtypes e broadcasting
2. pandas Series e DataFrame
Encapsule dados rotulados em estruturas pandas.
import pandas as pd
revenue = pd.Series([120, 340, 280], index=["Jan", "Fev", "Mar"], name="revenue")
df = pd.DataFrame({"region": ["East", "West", "East"], "revenue": revenue.values})
print(df.dtypes)- Uma
Seriesé uma única coluna com um índice. - Um
DataFrameé uma tabela de Series alinhadas compartilhando o mesmo índice. .dtypesrevela se as colunas são numéricas, de string ou categóricas.
Relacionado: pandas Series & DataFrames - construção e seleção
3. Ler CSV e Inspecionar
Carregue um arquivo e analise-o antes de transformar.
import pandas as pd
from io import StringIO
csv = "date,region,revenue\n2025-01-01,East,120\n2025-01-02,West,340\n"
df = pd.read_csv(StringIO(csv), parse_dates=["date"])
print(df.info())
print(df.isna().sum())parse_datesarmazena datas/horas como dtypes corretos, não strings.info()mostra contagens não nulas e uso de memória.- Conte valores ausentes por coluna antes de agregar.
Relacionado: Limpeza e Transformação de Dados - valores ausentes e dtypes
4. Selecionar Linhas e Colunas
Use indexação baseada em rótulo e em posição.
import pandas as pd
df = pd.DataFrame({"region": ["East", "West", "East"], "revenue": [120, 340, 280]})
east = df.loc[df["region"] == "East", ["region", "revenue"]]
first_row = df.iloc[0].locseleciona por rótulos;.ilocseleciona por posição inteira.- Máscaras booleanas filtram linhas sem copiar o frame inteiro quando possível.
- Sempre atribua resultados filtrados a uma nova variável ou use
.copy()se for mutar.
Relacionado: pandas Series & DataFrames - regras de indexação
5. Lidar com Valores Ausentes
Remova ou preencha lacunas explicitamente.
import pandas as pd
import numpy as np
df = pd.DataFrame({"revenue": [120, np.nan, 280]})
filled = df["revenue"].fillna(df["revenue"].median())
dropped = df.dropna(subset=["revenue"])fillnacom uma estatística é aceitável para exploração; documente a política para produção.dropnaremove linhas - verifique se você não está enviesando agregações.- pandas 2.x usa dtypes anuláveis (
Int64) quando você precisa de inteiros com NA.
Relacionado: Limpeza e Transformação de Dados - correções de dtype
6. Agregação GroupBy
Resuma por categoria com split-apply-combine.
import pandas as pd
df = pd.DataFrame({"region": ["East", "West", "East"], "revenue": [120, 340, 280]})
summary = (
df.groupby("region", observed=True)["revenue"]
.agg(["sum", "mean", "count"])
.reset_index()
)groupbydivide linhas, aplica uma função por grupo e combina resultados.observed=Truepula níveis categóricos não utilizados no pandas 2.x..reset_index()transforma a chave de grupo de volta em uma coluna normal.
Relacionado: GroupBy & Agregação - tabelas pivotantes
7. Mesclar Duas Tabelas
Combine conjuntos de dados em uma chave compartilhada.
import pandas as pd
orders = pd.DataFrame({"order_id": [1, 2], "region": ["East", "West"]})
revenue = pd.DataFrame({"order_id": [1, 2], "amount": [120, 340]})
merged = orders.merge(revenue, on="order_id", how="inner", validate="one_to_one")how="inner"mantém apenas chaves correspondentes - documente o que você descarta.validatedetecta junções acidentais de um-para-muitos precocemente.- Verifique as contagens de linhas antes e depois de cada mesclagem.
Relacionado: Junções & Mesclagens - detecção de duplicatas
Exemplos Intermediários
8. Reamostragem de uma Série Temporal
Agregue dados diários para totais mensais.
import pandas as pd
idx = pd.date_range("2025-01-01", periods=90, freq="D", tz="UTC")
df = pd.DataFrame({"revenue": range(90)}, index=idx)
monthly = df["revenue"].resample("ME").sum()- Índices de data/hora permitem agrupamento ciente do calendário via
.resample. - Armazene timestamps em UTC; converta para hora local apenas para exibição.
"ME"é a frequência de fim de mês no pandas moderno.
Relacionado: Séries Temporais - janelas deslizantes e fusos horários
9. Polars Lazy Scan
Adie o trabalho e deixe o planejador de consultas otimizar I/O.
import polars as pl
lf = pl.scan_parquet("sales.parquet")
result = (
lf.filter(pl.col("region") == "East")
.group_by("month")
.agg(pl.col("revenue").sum().alias("total"))
.collect()
)
print(result)- Frames preguiçosos do Polars empurram filtros para baixo antes de ler todas as colunas.
.collect()executa o plano - mantenha a lógica preguiçosa até precisar de dados materializados.- Polars 1.x usa o layout de memória Apache Arrow para operações colunares rápidas.
Relacionado: Polars - padrões de avaliação preguiçosa
10. dtypes com Eficiência de Memória
Reduza um frame largo antes que ele esgote a RAM.
import pandas as pd
df = pd.read_csv("large.csv", dtype={"region": "category", "units": "int32"})
df["revenue"] = pd.to_numeric(df["revenue"], downcast="float")
print(df.memory_usage(deep=True).sum() / 1e6, "MB")categoryarmazena strings repetidas uma vez - ideal para colunas de baixa cardinalidade.downcastescolhe o menor dtype numérico que se ajusta aos seus valores.- Meça com
memory_usage(deep=True)após cada carga pesada.
Relacionado: Desempenho e Memória - chunking e Arrow
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.