Consulta e modificação
Depois de inspecionar a estrutura, o próximo passo é selecionar subconjuntos relevantes e modificar o DataFrame para responder perguntas específicas.
Seleção de colunas
# Uma coluna (Series)
df["titulo"]
# Várias colunas (DataFrame)
df[["titulo", "data", "horario"]]
Estes comandos são usados para visualisar a coluna selecionada.
Seleção de linhas
Por posição (.iloc)
Indexação baseada em números inteiros para seleção por posição.
df.iloc[0] # primeira linha
df.iloc[-1] # última linha
df.iloc[0:5] # cinco primeiras linhas
df.iloc[0:5, 0:2] # cinco linhas, duas colunas
Possível Erro Index Error: Caso o indexador solicirado estiver fora dos limites.
Por rótulo de índice (.loc)
Indexação baseada em rótulos e também em matrizes booleanas.
df.loc[0] # rótulo 0
df.loc[df["data"] == "2023-01-15"] # filtro por valor
df.loc[0, "titulo"] # uma célula
df.loc[0:5, ["titulo", "data"]] # fatiamento + colunas
Possíveis Erros
Key Error: Se nenhum ítem for encontrado
Indexing Error: Ocorre quando uma chave indexada é fornecida, mas seu índice não é passível de alinhamento com o índice do DataFrame (frame index).
Use .loc[] quando o índice for significativo (datas, IDs); use .iloc[] quando quiser pegar “as primeiras N linhas” ou similar. Quando estiver em dúvida, .loc[] é mais legível.
Filtros booleanos
Toda comparação aplicada a uma coluna devolve uma Series booleana:
df["data"] > "2020-01-01"
# 0 False
# 1 False
# ...
# 5039 True
# Name: data, dtype: bool
Essa Series booleana pode ser usada para filtrar:
notas_recentes = df[df["data"] > "2020-01-01"]
Operadores lógicos
Para combinar condições, use & (E), | (OU) e ~ (NÃO). Sempre com parênteses ao redor de cada condição:
# Notas de 2020 que têm "Brasil" no título
filtro = (df["data"] >= "2020-01-01") & (df["titulo"].str.contains("Brasil"))
df[filtro]
# Notas que NÃO são de 2024
df[~(df["data"].str.startswith("2024"))]
| Operador Pandas | Equivalente Python | Significado |
|---|---|---|
& | and | E lógico |
| | or | OU lógico |
~ | not | Negação |
Não use and, or, not em filtros de DataFrame — eles operam em valores escalares, não em séries inteiras. O resultado é um ValueError.
.isin() para múltiplos valores
Este método compara todos os valores do DF com o valor especificado dentro dos parênteses. Caso esses valores existam, são retornados na forma de DF com as indicaçõe de True e False, este DF é chamado de “máscara booleana”.
anos_alvo = ["2020", "2021", "2022"]
df[df["data"].str[:4].isin(anos_alvo)]
.str para operações textuais
Series.str aplica operações de string a cada elemento da coluna:
df[df["titulo"].str.contains("Mercosul", case=False, na=False)]
df[df["titulo"].str.startswith("NOTA")]
df[df["titulo"].str.len() > 50]
na=False evita que valores NaN quebrem o filtro.
Aqui está o conteúdo organizado e explicado em formato .mdx, ideal para a documentação do seu site no Astro.
Modificação
A modificação de dados é o coração do Pandas. Ela permite transformar dados brutos em informações úteis para análise.
Criar uma coluna
Você pode criar novas colunas atribuindo valores a uma chave que ainda não existe no DataFrame.
- Extração de datas: O método
pd.to_datetimeconverte strings em objetos de data reais. O acessador.dtpermite extrair partes específicas comoyear(ano) oumonth(mês). - Manipulação de texto: O acessador
.strpermite tratar o conteúdo da coluna como strings. O.slice(0, 30)é útil para criar resumos ou títulos curtos, limitando a quantidade de caracteres.
df["ano"] = pd.to_datetime(df["data"]).dt.year
df["mes"] = pd.to_datetime(df["data"]).dt.month
df["titulo_curto"] = df["titulo"].str.slice(0, 30)
Atualizar valores condicionalmente
Muitas vezes, a criação ou alteração de uma coluna depende de uma regra lógica.
- Máscaras Booleanas: No exemplo de
df["longa"], o Pandas cria uma coluna deTrue/Falsebaseada no comprimento do texto. - Uso do
.loc: Esta é a forma mais segura de alterar valores. O comandodf.loc[condição, coluna] = valorlocaliza as linhas que atendem à condição e altera apenas a coluna especificada. É ideal para limpar dados, como substituir “00:00” porNone(vazio).
# Marcar notas longas (True se parágrafos > 5)
df["longa"] = df["paragrafos"].str.len() > 5
# Substituir valor específico usando localização explícita
df.loc[df["horario"] == "00:00", "horario"] = None
Remover colunas e linhas
Existem duas formas principais de remover dados:
drop: Remove explicitamente pelo nome da coluna ou rótulo do índice.
inplace=True: Modifica o DataFrame original. Sem isso, o Pandas apenas te mostra como ficaria o resultado, mas não salva a alteração.
- Filtragem: Em vez de “apagar” o que você não quer, você cria um novo DataFrame contendo apenas o que você quer manter. É uma forma mais funcional e segura de trabalhar.
df.drop(columns=["horario_atualizado"], inplace=True) # Modifica o arquivo atual
# Remove as 3 primeiras linhas pelo índice
df.drop(index=[0, 1, 2])
# Filtro: mantém apenas onde o título não é "NA"
df = df[df["titulo"] != "NA"]
Renomear colunas
rename: Ideal para trocar o nome de apenas algumas colunas específicas usando um dicionário{ "nome_antigo": "nome_novo" }.- Atribuição direta: Ao usar
df.columns = [...], você deve fornecer uma lista com nomes para todas as colunas, na ordem exata.
df.rename(columns={"horario": "hora_publicacao"}, inplace=True)
Ordenação
A ordenação facilita a visualização de tendências temporais ou rankings.
- Crescente vs Decrescente: Por padrão, o
sort_valuesé crescente. Useascending=Falsepara inverter (ex: ver as datas mais recentes primeiro). - Múltiplas chaves: Você pode passar uma lista de colunas. O Pandas ordenará pela primeira e, em caso de empate, usará a segunda para desempatar.
sort_index: Útil quando você quer organizar o DataFrame pela sua “etiqueta” lateral (ID ou Data, caso a data seja o índice).
df.sort_values(["ano", "mes"], ascending=[True, True]) # Ordena por ano e depois por mês
df.sort_index() # Organiza pela ordem do índice (ex: 0, 1, 2...)
Resumo
| Operação | Comando |
|---|---|
| Selecionar coluna | df["c"] ou df[["c1", "c2"]] |
| Selecionar linha por posição | df.iloc[i] |
| Selecionar linha por rótulo | df.loc[r] |
| Filtrar | df[df["c"] > x] |
| Combinar filtros | df[(c1) & (c2)] |
| Adicionar coluna | df["nova"] = ... |
| Remover coluna | df.drop(columns=["c"]) |
| Ordenar | df.sort_values("c") |