Series e DataFrames no pandas: primeiros passos

Aprenda a trabalhar com tabelas de dados em Python usando pandas. Crie Series e DataFrames, carregue um arquivo CSV, verifique os dados carregados e selecione exatamente as linhas e colunas necessárias por rótulo com loc e por posição com iloc. Filtre linhas por condições, adicione e transforme colunas, ordene valores e atribua postos a eles, e resuma dados com estatísticas descritivas, contagens de ocorrências por valor e correlação. Os exemplos seguem o pandas 3.

IntermediárioAula 2 de 8 do curso Curso de Análise de dados com Python

O que você vai aprender

  1. Descrever como o pandas armazena dados unidimensionais e bidimensionais com rótulos, construir Series e DataFrames a partir de dados Python e gerenciar seus rótulos de linhas e colunas.
    • Criar uma Series e usar seu índice
      Construir uma Series a partir de uma lista ou dicionário, ler seus valores, índice, tipo de dados e nome, e prever como os rótulos se comportam em operações aritméticas e consultas.
    • Construir um DataFrame e interpretar sua estrutura
      Criar um DataFrame a partir de dados Python, ler sua forma, colunas, índice e tipos de dados, selecionar uma coluna como Series e usar corretamente o argumento axis.
    • Definir, redefinir, renomear e remover rótulos
      Escolher um índice de linhas significativo, movê-lo de volta para uma coluna, renomear e remover linhas ou colunas e manter os resultados por reatribuição.
  2. Ler um arquivo CSV em um DataFrame com as opções adequadas, inspecionar o resultado sistematicamente e converter colunas para os tipos necessários à análise.
    • Ler um arquivo CSV com read_csv
      Carregar um arquivo separado por vírgulas com pd.read_csv, compreender como o pandas infere os tipos de colunas e usar as opções para separadores, decimais, cabeçalhos, valores ausentes e identificadores.
    • Inspecionar um novo DataFrame
      Verificar uma tabela recém-carregada com head, info, shape, dtypes, contagens de valores ausentes e contagens de valores distintos antes de analisá-la.
    • Converter colunas para os tipos adequados
      Alterar o tipo de dados de uma coluna com astype, pd.to_numeric e pd.to_datetime e manter a coluna convertida por reatribuição.
  3. Selecionar exatamente as linhas, colunas e valores individuais necessários com loc (rótulos) e iloc (posições), e prever a forma e o tipo de cada resultado.
    • Selecionar linhas e colunas por rótulo com loc
      Usar df.loc[rows, columns] com rótulos individuais, listas, fatias com extremos inclusos e máscaras booleanas, e reconhecer quando um rótulo não existe.
    • Selecionar por posição com iloc e escolher o indexador adequado
      Usar df.iloc[rows, columns] com posições inteiras, fatias com extremo final excluído e posições negativas, ler valores individuais com at e iat e decidir entre seleção por rótulo e por posição.
  4. Manter apenas as linhas que atendem a uma ou mais condições, usando máscaras booleanas, métodos auxiliares para testes comuns e query, e alterar valores nas linhas selecionadas com segurança.
    • Filtrar com máscaras booleanas
      Construir uma máscara True/False a partir de uma comparação, combinar condições com &, | e ~, contar correspondências e compreender como valores ausentes se comportam em comparações.
    • Usar métodos auxiliares e query para filtros comuns
      Filtrar com isin, between, isna/notna e str.contains e escrever as mesmas condições como uma string legível em query.
    • Alterar valores nas linhas selecionadas com segurança
      Atualizar valores nas linhas que atendem a uma condição com uma única atribuição usando loc e evitar a atribuição encadeada, que não altera a tabela original no pandas 3.
  5. Criar novas colunas a partir das existentes com aritmética vetorizada e assign e recodificar ou transformar valores com np.where, map, apply e replace.
    • Calcular novas colunas a partir das existentes
      Adicionar ou sobrescrever uma coluna com aritmética vetorizada, usar assign para construir colunas em uma sequência de métodos e prever como valores ausentes e o alinhamento por índices afetam o resultado.
    • Recodificar e transformar valores com np.where, map e apply
      Transformar condições em rótulos com np.where, traduzir valores com map e replace, aplicar suas próprias funções com apply e preferir formas vetorizadas quando existirem.
  6. Ordenar linhas por uma ou mais colunas, atribuir postos aos valores com uma regra adequada para empates, calcular estatísticas descritivas para colunas numéricas e de texto e contar valores e relações.
    • Ordenar linhas por valores ou pelo índice
      Ordenar um DataFrame por uma ou várias colunas em qualquer direção, controlar a posição de valores ausentes e empatados e encontrar as primeiras ou últimas linhas.
    • Atribuir postos aos valores e tratar empates
      Atribuir a cada valor seu posto com rank, escolher um método de desempate adequado ao objetivo e expressar postos como percentis.
    • Resumir colunas com estatísticas descritivas
      Calcular contagens, totais, medidas de tendência central, dispersão e quartis com métodos do pandas e describe, interpretá-los e tratar corretamente valores ausentes e colunas de texto.
    • Contar valores e medir relações
      Contar quantas vezes cada valor ocorre, listar valores distintos, expressar contagens como proporções e medir a relação linear entre duas colunas numéricas com correlação.

Guia de estudo de Series e DataFrames no pandas

6 capítulos

1

Compreender Series e DataFrames

Rótulos transformam uma sequência de números em dados que você pode identificar e combinar. Construa uma Series para uma variável e um DataFrame para várias variáveis, depois leia suas dimensões e tipos. Você verá por que a correspondência de rótulos importa na aritmética, como uma coluna difere de uma tabela de uma coluna e como escolher, redefinir ou renomear um índice altera consultas posteriores. Essas estruturas sustentam todas as seleções e cálculos a seguir.

1.1 Criar uma Series e usar seu índice

Uma Series mantém uma sequência de valores junto com rótulos. Esses rótulos dão significado aos valores: uma medição de chuva pertence a um dia, e uma população pertence a uma cidade. Importe pandas e NumPy usando seus nomes curtos habituais.

import pandas as pd
import numpy as np
rain = pd.Series([4.5, 3.0, 6.2],
                 index=["Mon", "Tue", "Wed"], name="rain_mm")
Ler valores e rótulos

Os valores são 4,5; 3,0 e 6,2; o índice é Mon, Tue e Wed. Sem index=, o pandas fornece os rótulos 0, 1 e 2. Um dicionário fornece ambos de uma vez: pd.Series({"Lima": 10, "Oslo": 5, "Pune": 7}) obtém seus rótulos das chaves, na ordem do dicionário.

Atributos descrevem a Series sem parênteses: rain.index contém os rótulos, rain.dtype é float64, rain.name é "rain_mm" e rain.size é 3. Use rain.to_numpy() quando precisar de um array do NumPy. O atributo mais antigo .values retorna tipos diferentes de array para tipos de dados diferentes; dados de texto podem produzir um array do pandas.

Um tipo de dados informa ao pandas que tipo de valores ele armazena. Tipos comuns são int64 para números inteiros, float64 para decimais, bool para True/False, str para texto e datetime64 para datas e horas. O pandas 3 infere texto como str; exemplos antigos frequentemente exibem object.

Trabalhar com a Series inteira

Para s = pd.Series([10, 20, 30], index=["a", "b", "c"]), s * 2 produz os valores 20, 40 e 60. s > 15 produz False, True e True. Ambos mantêm os rótulos. Essas operações são vetorizadas: uma expressão opera sobre a Series inteira sem um laço Python.

Consulte um rótulo com s["b"], que produz 20. Consulte uma posição com s.iloc[0], que produz 10. A expressão "b" in s verifica o índice; 20 in s é False. Mesmo um inteiro entre colchetes é um rótulo: com o índice [2, 0, 1], s[0] significa o rótulo 0, não a primeira entrada. Com rótulos de texto, s[0] gera KeyError no pandas 3.

Associar rótulos na aritmética
a = pd.Series([1, 2, 3], index=["x", "y", "z"])
b = pd.Series([10, 20, 30], index=["y", "z", "w"])
a + b

O rótulo compartilhado y combina 2 e 10 para produzir 12,0; z combina 3 e 20 para produzir 23,0. Os rótulos w e x aparecem em apenas uma entrada, então recebem NaN. O resultado inclui os quatro rótulos. Somar pela posição visual das linhas produziria incorretamente 11, 22 e 33.

Use a.add(b, fill_value=0) quando um valor ausente deve contar como zero. Seus resultados são w 30,0, x 1,0, y 12,0 e z 23,0. Métodos relacionados incluem sub, mul e div.

Reconhecer valores ausentes

Um valor ausente de ponto flutuante ou str usa NaN; uma data ou hora ausente usa NaT; um inteiro ausente em um tipo com suporte a valores ausentes usa <NA>. pd.Series([1, None, 3]) se torna float64, exibindo 1,0, NaN e 3,0, porque o tipo comum int64 não pode armazenar NaN.

Principais conclusões

  • Uma Series combina uma sequência de valores com um índice, um tipo de dados e um nome opcional.
  • Use um rótulo para consulta e iloc para uma posição; testes de pertencimento verificam os rótulos.
  • A aritmética vetorizada atua sobre cada valor mantendo o índice.
  • Duas Series são alinhadas por rótulo; rótulos sem correspondência recebem resultados ausentes, a menos que um valor de preenchimento seja fornecido.
  • Marcadores de valores ausentes dependem do tipo de dados: NaN, NaT ou <NA>.

1.2 Construir um DataFrame e interpretar sua estrutura

Um DataFrame é uma tabela bidimensional. Cada linha registra uma observação, como um pedido; cada coluna contém uma variável, como uma quantidade. As colunas podem ter tipos de dados diferentes, mas compartilham o mesmo índice de linhas.

Construir uma tabela a partir de dados Python
df = pd.DataFrame({
    "product": ["Notebook", "Desk lamp", "Pen set", "Mug"],
    "quantity": [3, 1, 2, 4],
    "unit_price": [2.50, 18.00, 4.75, 6.00]
})

Cada chave do dicionário se torna um nome de coluna; cada lista fornece os valores dessa coluna. As listas devem ter o mesmo comprimento para que cada linha tenha um lugar em cada coluna. Aqui os rótulos do índice vão de 0 a 3. Listas de comprimentos diferentes geram um ValueError.

Uma lista de dicionários, por sua vez, fornece um dicionário por linha. pd.DataFrame([{"a": 1, "b": 2}, {"a": 3, "c": 4}]) cria as colunas a, b e c. O b ausente na segunda linha e o c ausente na primeira se tornam NaN, então essas colunas usam float64. Um array bidimensional do NumPy também pode fornecer valores, com columns=[...] nomeando as colunas.

Ler as dimensões da tabela

df.shape é (4, 3): quatro linhas e três colunas, nessa ordem. len(df) é 4, enquanto df.size é 12 porque conta células. df.index contém rótulos de linhas, df.columns contém rótulos de colunas e df.dtypes fornece um tipo de dados por coluna. Esses são atributos: df.shape() tenta chamar uma tupla e gera TypeError. df.T troca linhas por colunas.

Manter uma Series ou uma tabela
SeleçãoResultado
df["quantity"]Uma Series
df[["quantity"]]Um DataFrame de uma coluna
df[["product", "unit_price"]]Um DataFrame com duas colunas nessa ordem

A lista interna solicita uma coleção de colunas. Sem ela, df["product", "unit_price"] fornece uma única chave em forma de tupla, que não corresponde a nenhum dos nomes comuns de coluna e gera KeyError.

Colchetes também funcionam quando os nomes contêm espaços ou entram em conflito com métodos. A notação com ponto, como df.quantity, só funciona para nomes adequados. Uma coluna chamada size precisa de df["size"], porque df.size significa o número de células da tabela. Crie colunas também com colchetes: df["total"] = 5 adiciona uma coluna, enquanto df.total = 5 não adiciona.

Escolher um eixo

Para numbers = pd.DataFrame({"a": [1, 2], "b": [3, 4]}), numbers.sum() soma ao longo das linhas, produzindo a 3 e b 7. Esse é o axis=0, também chamado de "index". numbers.sum(axis=1) soma ao longo de cada linha, produzindo 4 e 6; esse eixo também é chamado de "columns". Identifique primeiro o resultado necessário: um total por coluna ou um total por linha.

Extrair uma linha cria uma Series cujos rótulos são os nomes das colunas. Essa Series precisa de um tipo de dados capaz de armazenar todas as células da linha. Uma linha que mistura inteiros e números de ponto flutuante se torna float64; uma linha que mistura texto e números se torna object. As colunas originais mantêm seus tipos separados.

Principais conclusões

  • Um DataFrame tem um índice de linhas compartilhado e um tipo de dados por coluna.
  • Listas de mesmo comprimento fornecem colunas; uma lista de dicionários fornece linhas.
  • shape conta linhas e colunas; size conta células.
  • Um único nome de coluna retorna uma Series; uma lista de nomes retorna um DataFrame.
  • axis=0 reduz ao longo das linhas; axis=1 reduz ao longo das colunas.
  • Use colchetes para nomes de colunas que entram em conflito com atributos ou métodos.

1.3 Definir, redefinir, renomear e remover rótulos

Rótulos de linhas podem ter significado, como um número de pedido, ou apenas identificar as linhas atuais. Escolher um índice útil facilita a interpretação de consultas e resultados posteriores. Alterar rótulos retorna uma nova tabela, então mantenha o resultado com uma atribuição.

Mover um identificador para o índice
orders = pd.DataFrame({
    "order_id": [1001, 1002, 1003],
    "product": ["Notebook", "Desk lamp", "Pen set"],
    "unit_price": [2.50, 18.00, 4.75]
})
orders_by_id = orders.set_index("order_id")

A tabela original tem um RangeIndex padrão: 0, 1 e 2. A nova tabela tem os rótulos 1001, 1002 e 1003. order_id saiu das colunas e passou para o índice. orders_by_id.loc[1002] agora identifica a linha de Desk lamp pelo identificador.

Chamar orders.set_index("order_id") sem salvar o resultado deixa orders inalterado. Uma reatribuição, como orders = orders.set_index("order_id"), mantém a nova estrutura. No pandas 3.1, inplace= está obsoleto para esses métodos de alteração de rótulos e para ordenação; use atribuição.

Mover rótulos de volta para uma coluna

orders_by_id.reset_index() restaura order_id como uma coluna comum e fornece um novo RangeIndex. Um índice sem nome se torna uma coluna chamada index. Isso preserva a identidade antiga das linhas.

reset_index(drop=True) descarta os rótulos antigos. Para um índice [10, 20, 30], reset_index() mantém esses números em uma coluna index; reset_index(drop=True) os perde e usa 0, 1 e 2. Após filtrar ou ordenar, decida se os rótulos antigos são úteis antes de descartá-los. Renumerar o índice não altera os valores dos dados nem desfaz uma ordenação.

Renomear ou remover rótulos
renamed = orders.rename(columns={"unit_price": "price"})
short = orders.drop(columns=["product"])
remaining = orders.drop(index=[0, 1])

rename associa rótulos antigos a novos e mantém os nomes não listados. Por padrão, um nome antigo escrito incorretamente é ignorado, então inspecione .columns se uma renomeação parecer não ter feito nada. Para substituir todos os nomes de colunas, atribua uma lista completa a orders.columns; seu comprimento deve corresponder ao número de colunas.

drop(columns=...) remove colunas; drop(index=...) remove linhas por rótulo. Um rótulo ausente gera KeyError. Após ordenar, o rótulo 0 pode não estar mais na primeira linha: removê-lo ainda remove a linha com rótulo 0.

Selecione uma lista para escolher a ordem das colunas: orders = orders[["order_id", "unit_price", "product"]]. Colunas ausentes dessa lista são removidas do resultado.

Verificar se um identificador realmente identifica uma linha

Rótulos de índice podem se repetir. Verifique orders_by_id.index.is_unique antes de tratá-los como identificadores únicos. Se o rótulo 1002 ocorrer duas vezes, .loc[1002] retornará ambas as linhas como um DataFrame. Com rótulos únicos, a mesma consulta por um único rótulo retorna uma Series.

Um índice significativo também melhora os resumos. Em uma tabela meteorológica indexada por dia, weather["temp_c"].idxmax() informa um dia como "Thu"; com um índice padrão, informa um número de linha.

Principais conclusões

  • set_index move uma coluna para os rótulos de linha; reset_index move os rótulos de volta para uma coluna.
  • reset_index(drop=True) descarta os rótulos antigos.
  • Mantenha as alterações de rótulos atribuindo a tabela retornada.
  • rename altera os rótulos informados; drop remove linhas ou colunas por rótulo.
  • Um índice pode conter duplicatas; verifique a unicidade antes de usá-lo como identificador.
2

Carregar um arquivo CSV e verificar os dados carregados

Uma tabela carregada precisa ser verificada antes que seus números possam sustentar uma análise. Ajuste as opções de CSV ao delimitador, ao cabeçalho e às convenções de valores do arquivo e inspecione o resultado em busca das linhas, nomes e tipos esperados. Investigue entradas ausentes e identificadores repetidos e converta texto numérico ou de datas quando necessário. Pequenas escolhas na importação importam: um zero à esquerda perdido ou uma data não interpretada pode mudar o significado do código posterior.

2.1 Ler um arquivo CSV com read_csv

Um CSV armazena uma tabela como texto: registros ocupam linhas e um delimitador separa os campos. A primeira linha frequentemente contém nomes de colunas. Carregar o arquivo corretamente exige identificar tanto sua estrutura quanto o significado de seus valores.

Carregar a tabela de pedidos
orders = pd.read_csv("orders.csv")

Um caminho relativo é resolvido a partir do diretório de trabalho atual do Python. Uma localização incorreta gera FileNotFoundError. Um caminho absoluto ou uma URL também pode ser passado a read_csv.

Os exemplos usam este arquivo. A última linha tem um campo de quantidade vazio.

order_id,date,product,category,quantity,unit_price
1001,2026-03-02,Notebook,Stationery,3,2.50
1002,2026-03-02,Desk lamp,Home,1,18.00
1003,2026-03-03,Pen set,Stationery,2,4.75
1004,2026-03-04,Mug,Home,4,6.00
1005,2026-03-04,Backpack,Bags,1,35.00
1006,2026-03-05,Notebook,Stationery,,2.50

Com as opções padrão, o resultado tem forma (6, 6) e rótulos de índice de 0 a 5. O pandas infere os tipos: order_id é int64, unit_price é float64 e quantity também se torna float64 porque seu campo em branco se torna NaN. As outras colunas, incluindo date, são str. Uma string que parece uma data ainda é texto até ser interpretada.

Ajustar à estrutura do arquivo
Característica do arquivoOpção de leitura
Campos separados por ponto e vírgulasep=";"
Vírgulas decimaisdecimal=","
Sem linha de cabeçalhoheader=None, names=["id", "product"]
Duas linhas extras antes do cabeçalhoskiprows=2
Apenas campos selecionados são necessáriosusecols=["product", "quantity"]
Uma prévia curtanrows=100

Para um arquivo cujas linhas são a;b, 1,5;2 e 3,0;4, use pd.read_csv("file.csv", sep=";", decimal=","). A coluna a contém então 1,5 e 3,0. Usar a vírgula como separador padrão produz uma coluna chamada a;b, um sinal para verificar o delimitador.

index_col="order_id" transforma essa coluna no índice de linhas durante o carregamento. thousands="," lê um campo como "1,200" como 1200; em um arquivo separado por vírgulas, o campo precisa estar entre aspas conforme as regras do CSV para que sua vírgula interna não seja outro delimitador.

Preservar o significado ao inferir tipos

Códigos como "001" são identificadores, não quantidades. dtype={"id": str} preserva seus zeros à esquerda. Se o pandas primeiro os converter para 1, converter esse número de volta para texto não consegue recuperar quantos zeros o arquivo continha.

Campos vazios e marcadores comuns como NA, N/A, NULL, NaN e None são ausentes por padrão. Adicione um marcador específico do arquivo com na_values=["-"]. Essas são regras de carregamento, então verifique as convenções do arquivo quando um código parecer um marcador de valor ausente.

Use parse_dates=["date"] para ler as datas do exemplo como valores de data e hora. No pandas 3, essas datas usam resolução de microssegundos, datetime64[us]. UTF-8 é a codificação de texto padrão. Um UnicodeDecodeError exige verificar a codificação do arquivo e fornecer a opção correspondente, como encoding="latin-1".

Principais conclusões

  • read_csv retorna um DataFrame e infere os tipos das colunas.
  • Ajuste sep, decimal e as opções de cabeçalho à estrutura do arquivo.
  • Preserve zeros à esquerda em identificadores usando um tipo de texto durante o carregamento.
  • Campos em branco e marcadores comuns de valores ausentes se tornam valores ausentes; na_values adiciona marcadores.
  • Datas precisam ser interpretadas, com parse_dates durante o carregamento ou por conversão posterior.
  • Um caminho relativo é resolvido a partir do diretório de trabalho atual.

2.2 Inspecionar um novo DataFrame

Uma leitura bem-sucedida significa que o pandas conseguiu interpretar o arquivo. Isso não estabelece que as colunas, os tipos e os valores ausentes correspondam ao que a tabela deve representar. Inspecione o novo DataFrame antes de fazer cálculos com ele.

Verificar linhas visíveis e dimensões
orders.head(3)
orders.tail()
orders.shape
orders.columns.tolist()

head() mostra cinco linhas por padrão; head(3) mostra três. tail() verifica o fim, onde uma exportação pode conter registros diferentes. sample(3, random_state=0) fornece uma amostra aleatória reproduzível de três linhas. Em um caderno computacional, a expressão final de uma célula é exibida automaticamente; em outros ambientes, use print.

O arquivo de pedidos deve conter seis linhas e seis colunas. Uma prévia deve mostrar colunas nomeadas e o primeiro pedido como dado. Se o primeiro registro aparecer entre os nomes das colunas, o arquivo provavelmente não tem cabeçalho e precisa de header=None. Se tudo ocupar uma única coluna larga, verifique sep.

Os nomes das colunas devem corresponder exatamente, incluindo maiúsculas, minúsculas e espaços. orders["Product"] falha quando o nome é product. Inspecionar a lista facilita a identificação de espaços no fim. orders.columns = orders.columns.str.strip() remove espaços das extremidades dos nomes do cabeçalho.

Ler a estrutura com info

orders.info() exibe o intervalo do índice, o nome de cada coluna, a contagem de valores presentes, o tipo de dados e o uso de memória. No exemplo de seis linhas, quantity tem cinco valores não nulos; as outras colunas têm seis cada. Os tipos são duas colunas de ponto flutuante, uma coluna inteira e três colunas str. orders.dtypes fornece uma lista compacta dos tipos.

Uma coluna aparentemente numérica com tipo str merece inspeção: um valor como "unknown", uma unidade como "12 kg" ou um separador de milhares não tratado pode impedir a inferência numérica. Datas também permanecem como texto, a menos que sejam interpretadas. Decida o tipo necessário pelo significado da coluna, não apenas por sua aparência em uma prévia.

Contar lacunas e valores repetidos
orders.isna().sum()
orders.isna().any(axis=1).sum()
orders.nunique()

isna() cria uma tabela booleana: True marca uma célula ausente. Somar ao longo de cada coluna conta essas células. Quantity tem um valor ausente e todas as outras colunas têm zero. Para contar as linhas afetadas, .any(axis=1) primeiro verifica se cada linha tem alguma lacuna, depois .sum() conta essas linhas. Somar todas as contagens das colunas poderia contar uma linha várias vezes.

nunique() conta valores presentes distintos: os pedidos têm seis identificadores, quatro datas, cinco produtos, três categorias, quatro quantidades e cinco preços. Compare a contagem de identificadores com a contagem de linhas para verificar a unicidade, junto com a contagem de identificadores ausentes. orders.duplicated(subset="product") marca a segunda linha com Notebook, de rótulo 5, como repetida. Um produto repetido é legítimo aqui; um identificador de pedido repetido exigiria investigação.

Ler uma visão geral numérica rápida

orders.describe() apresenta contagem, média, desvio padrão, mínimo, quartis e máximo para colunas numéricas. A contagem de quantity é cinco, então sua média resume cinco quantidades registradas. Verifique intervalos e unidades plausíveis, além dos tipos: uma coluna pode ser numérica e ainda conter um erro de entrada. Mantenha juntos a contagem observada de linhas e colunas, os tipos, as contagens de valores ausentes e a verificação de identificadores ao revisar um novo carregamento.

Principais conclusões

  • Use prévias, dimensões, nomes exatos de colunas e tipos de dados em conjunto após o carregamento.
  • info() exibe contagens de valores não nulos e tipos; não retorna uma tabela de resumo.
  • isna().sum() conta células ausentes por coluna; .any(axis=1).sum() conta linhas afetadas.
  • Verifique tanto os identificadores ausentes quanto o número de identificadores distintos.
  • As contagens de describe() mostram quantos valores registrados sustentam um resumo numérico.

2.3 Converter colunas para os tipos adequados

O tipo de dados de uma coluna determina quais operações fazem sentido. Uma coluna de texto contendo "12" ainda armazena texto; não é possível calcular sua média como a de uma coluna numérica. Converta deliberadamente e atribua o resultado de volta à tabela.

Escolher conversão estrita ou coerção

astype converte uma Series para um tipo especificado, como int, float, str ou "Int64". A conversão falha quando um valor não pode ser representado no tipo solicitado.

raw = pd.Series(["12", "7", "n/a", "3.5"])
numeric = pd.to_numeric(raw, errors="coerce")

raw.astype(float) gera ValueError em "n/a". Com errors="coerce", os valores de saída são 12,0; 7,0; NaN e 3,5. O valor que falhou se torna ausente em vez de interromper a conversão. Compare raw.isna().sum() com numeric.isna().sum(): zero valores ausentes passaram a ser um, identificando um valor que precisa de verificação.

A coerção é uma política de conversão, não uma evidência de que toda nova lacuna seja inofensiva. Use as contagens anteriores e posteriores para encontrar perdas. Armazene a conversão em uma nova variável ou coluna quando o texto bruto for útil para rastrear um valor cuja conversão falhou.

Manter números inteiros ausentes

A coluna de quantidade dos pedidos contém números inteiros e um NaN, então é float64. O astype(int) comum falha porque NaN não tem representação inteira comum.

orders["quantity"] = orders["quantity"].astype("Int64")

O I maiúsculo importa: Int64, com suporte a valores ausentes, mantém a lacuna como <NA> enquanto armazena os valores conhecidos como números inteiros. Essa escolha é adequada para contagens com entradas ausentes. Ela não transforma uma quantidade realmente fracionária em uma contagem inteira válida.

Separadores de milhares em texto também precisam ser tratados. pd.Series(["1,200", "950"]).str.replace(",", "").astype(int) produz 1200 e 950. Quando o próprio arquivo usa essa convenção, thousands="," pode tratá-la durante a leitura.

Converter texto de datas
orders["date"] = pd.to_datetime(orders["date"])
orders["date"].dt.day_name()

A conversão permite usar .dt.year, .dt.month, .dt.day e .dt.day_name(). Para as seis datas dos pedidos, os nomes dos dias são Monday, Monday, Tuesday, Wednesday, Wednesday e Thursday. Executar pd.to_datetime(orders["date"]) sozinho produz uma Series convertida, mas deixa a coluna original como texto. É a atribuição que mantém o resultado.

Armazenar categorias repetidas

orders["category"].astype("category") armazena rótulos repetidos por meio de um conjunto de categorias permitidas. Em tabelas grandes, isso geralmente economiza memória. Atribua o resultado para mantê-lo, assim como em outras conversões.

O tipo categórico altera algumas operações. Suas categorias não são ordenadas por padrão, então min() e max() geram TypeError. O value_counts() de uma coluna categórica também lista categorias conhecidas ausentes de uma seleção filtrada com contagem zero. Escolher o tipo categórico é útil para rótulos repetidos, mas também altera o comportamento, além do armazenamento.

Principais conclusões

  • astype falha em conversões inválidas; to_numeric(errors="coerce") transforma valores inválidos em valores ausentes.
  • Compare as contagens de valores ausentes antes e depois da coerção.
  • Int64, com suporte a valores ausentes, armazena números inteiros com entradas ausentes.
  • Converta datas com to_datetime e leia seus componentes por meio de .dt.
  • Mantenha as conversões atribuindo seus resultados.
  • O tipo categórico não ordenado armazena rótulos repetidos com eficiência, mas altera alguns resumos.
3

Selecionar dados por rótulo e por posição

Uma linha pode ser identificada por seu rótulo ou encontrada por sua posição atual. Aprenda a tornar essa escolha explícita com loc e iloc, selecionar as colunas necessárias ao mesmo tempo e prever se uma seleção retorna um valor, uma Series ou um DataFrame. Os extremos das fatias e os rótulos mantidos explicam muitos erros de uma posição. A distinção se torna especialmente útil após uma tabela ter sido ordenada ou filtrada.

3.1 Selecionar linhas e colunas por rótulo com loc

Os rótulos permitem solicitar uma linha ou coluna pelo seu significado. Com loc, um número de pedido identifica uma linha mesmo que a tabela tenha sido ordenada. A seleção tem uma parte para linhas seguida de uma parte para colunas: df.loc[rows, columns].

Começar com um índice significativo

O arquivo de pedidos tem seis linhas com identificadores de 1001 a 1006. Crie orders_by_id = orders.set_index("order_id"). Suas colunas, em ordem, são date, product, category, quantity e unit_price. Os rótulos das linhas são números de pedidos, não as posições de 0 a 5.

orders_by_id.loc[1003]
orders_by_id.loc[1004, "product"]

A primeira expressão retorna o pedido 1003 como uma Series: date "2026-03-03", product "Pen set", category "Stationery", quantity 2,0 e preço 4,75. A Series tem o nome 1003. A segunda retorna uma célula, "Mug".

Um rótulo ausente gera KeyError. orders_by_id.loc[0] falha: ter uma primeira linha na posição 0 não cria um rótulo 0.

Selecionar conjuntos de rótulos
orders_by_id.loc[[1001, 1005], ["product", "unit_price"]]

Listas selecionam rótulos na ordem solicitada. Isso produz duas linhas e duas colunas: Notebook a 2,5, depois Backpack a 35,0. Uma lista mantém um resultado em forma de tabela mesmo quando contém um único rótulo: .loc[[1003]] é um DataFrame de uma linha.

SolicitaçãoForma
Um valor.loc[1004, "product"]
Uma linha completa.loc[1004]
Uma tabela de uma linha.loc[[1004]]
Todas as linhas, uma coluna.loc[:, "unit_price"]

Dois-pontos isolados significam todos os rótulos ao longo desse eixo. Omitir o seletor de colunas também solicita todas as colunas.

Incluir os dois extremos de uma fatia por rótulos
orders_by_id.loc[1002:1004, "product":"quantity"]

Nesse índice ordenado, as linhas são 1002, 1003 e 1004. A fatia de colunas inclui product, category e quantity. Tanto o rótulo final das linhas quanto o das colunas são incluídos, então a forma é (3, 3). Aplicar aqui a regra usual do Python que exclui o extremo final omitiria uma linha e uma coluna desejadas.

Os rótulos permanecem após a ordenação

Um índice padrão pode ocultar a distinção entre rótulo e posição. Suponha que a ordenação de notas produza os rótulos de linha 3, 0, 2, 1, 4. .loc[0] continua selecionando o rótulo 0, agora na segunda linha exibida. .iloc[0] seleciona a primeira linha exibida, com rótulo 3. A ordenação move uma linha com seu rótulo; ela não renumera o índice silenciosamente.

Combinar uma condição com a seleção de colunas

O seletor de linhas pode ser uma Series booleana:

orders.loc[orders["unit_price"] > 5, ["product", "unit_price"]]

Isso mantém Desk lamp a 18,0, Mug a 6,0 e Backpack a 35,0, e retorna apenas as duas colunas solicitadas. A máscara decide quais linhas atendem à condição; a lista de colunas decide o que mostrar. A mesma forma com dois eixos pode selecionar células para atualização, colocando a seleção no lado esquerdo de uma atribuição.

Principais conclusões

  • loc seleciona rótulos de linhas e nomes de colunas.
  • Listas solicitam rótulos na ordem em que são listados e preservam a dimensão do DataFrame nesse eixo.
  • Fatias por rótulos incluem o rótulo final; dois-pontos selecionam todos os rótulos.
  • Rótulos solicitados que não existem geram KeyError.
  • A ordenação move os rótulos com as linhas, então o rótulo 0 pode diferir da posição 0.
  • Uma máscara booleana de linhas e nomes de colunas podem ser usados na mesma chamada de loc.

3.2 Selecionar por posição com iloc e escolher o indexador adequado

Use iloc quando uma solicitação disser respeito à posição de uma linha ou coluna: as primeiras três linhas, a última coluna ou uma célula específica exibida. Seus seletores são posições inteiras, independentemente dos rótulos do índice.

Contar a partir de zero

orders.iloc[0] seleciona a primeira linha e orders.iloc[-1], a última. Uma posição negativa conta de trás para a frente. Duas posições selecionam uma célula: orders.iloc[2, 2] é "Pen set" na tabela original de pedidos, em que product está na posição de coluna 2.

A tabela indexada orders_by_id tem as colunas date, product, category, quantity e unit_price. Mover order_id para o índice alterou as posições das colunas, então product agora está na posição 1. O código baseado em posições depende dessa estrutura.

Parar antes do extremo final da fatia
orders_by_id.iloc[1:3, 0:2]

As posições de linha selecionadas são 1 e 2, que contêm os pedidos 1002 e 1003. As posições de coluna são 0 e 1, date e product. A posição 3 e a coluna 2 são excluídas, produzindo a forma (2, 2). Um início vazio significa o começo; um fim vazio significa o fim.

Listas solicitam posições específicas, incluindo uma mistura de posições positivas e negativas. orders.iloc[[0, -1], [2, 5]] seleciona product e unit_price para o primeiro e o último pedido. Ambos são Notebook a 2,5.

Prever a forma do resultado
SeleçãoResultado
orders.iloc[0, 2]Um valor
orders.iloc[0]Uma Series de uma linha
orders.iloc[:, 2]Uma Series de uma coluna
orders.iloc[[0]]Um DataFrame de uma linha
orders.iloc[0:1, 2:3]Um DataFrame de uma linha e uma coluna

Um escalar seleciona um item ao longo de um eixo e remove essa dimensão. Uma fatia ou lista mantém esse eixo, mesmo que selecione apenas um item. Isso importa quando a próxima operação espera uma tabela em vez de uma Series.

Tratar o fim de uma tabela

A tabela de pedidos de seis linhas tem posições de linha não negativas válidas de 0 a 5. orders.iloc[10] gera IndexError. Uma fatia pode ultrapassar a tabela: orders.iloc[4:100] simplesmente retorna as duas últimas linhas. Uma única posição inexistente é uma solicitação de item inválida, enquanto uma fatia descreve um intervalo limitado às linhas disponíveis.

Escolher rótulos ou posições de forma consciente

Para uma única célula, at usa rótulos e iat usa posições. orders.at[2, "product"] e orders.iat[2, 2] produzem "Pen set" antes de as linhas serem reordenadas.

Escolha loc quando souber um identificador ou o significado de uma coluna. Escolha iloc quando a própria localização importar. Para combinar as primeiras linhas com um nome de coluna, orders.columns.get_loc("quantity") retorna sua posição, 4, permitindo orders.iloc[0:3, 4].

Colchetes isolados podem mudar de função: orders["product"] seleciona uma coluna, mas orders[2:4] seleciona as posições de linha 2 e 3. Usar loc e iloc explicitamente torna essa escolha mais fácil de entender.

Principais conclusões

  • iloc usa posições inteiras começando em zero; posições negativas contam a partir do fim.
  • Fatias por posições excluem seu extremo final e podem ultrapassar as linhas disponíveis.
  • Uma única posição fora do intervalo gera IndexError.
  • Seletores escalares removem uma dimensão; listas e fatias a mantêm.
  • at seleciona uma célula por rótulo e iat seleciona uma célula por posição.
4

Filtrar linhas por condições

Condições permitem concentrar-se em observações que respondem a uma pergunta. Construa máscaras a partir de comparações, combine-as e use métodos auxiliares para categorias, intervalos, lacunas e correspondências de texto. Depois, direcione uma atualização à tabela original com uma atribuição usando loc. Filtragem e atualização compartilham uma condição de linha, mas acompanhar qual tabela recebe uma alteração é essencial sob a cópia na escrita do pandas 3.

4.1 Filtrar com máscaras booleanas

A filtragem seleciona observações que satisfazem uma pergunta, como quais pedidos pertencem a Home e custam mais de 10 por item. Primeiro, crie uma máscara booleana, uma Series com um True ou False por linha. Depois, use-a para selecionar as linhas correspondentes.

Construir e aplicar uma máscara
is_stationery = orders["category"] == "Stationery"
stationery = orders[is_stationery]

A máscara é True, False, True, False, False e True. A seleção mantém os rótulos 0, 2 e 5, correspondentes aos pedidos 1001, 1003 e 1006. A filtragem preserva esses rótulos; ela não os renumera. reset_index(drop=True) fornece rótulos consecutivos se necessário.

Os operadores de comparação incluem ==, !=, <, <=, > e >=. Comparações de texto exigem correspondência exata: "home" difere de "Home", e espaços também podem impedir uma correspondência.

Combinar condições linha por linha
is_home = orders["category"] == "Home"
is_expensive = orders["unit_price"] > 10
orders[is_home & is_expensive]

Apenas Desk lamp atende às condições: sua categoria é Home e seu preço é 18,0. Mug é da categoria Home, mas custa 6,0. Backpack custa 35,0, mas pertence a Bags.

Ao escrever comparações diretamente, coloque cada uma entre parênteses:

orders[(orders["category"] == "Home") &
       (orders["unit_price"] > 10)]

Use & para e, | para ou e ~ para não. Os parênteses mantêm cada comparação agrupada antes de o pandas combinar as máscaras. Sem eles, as regras de precedência do Python podem tentar combinar uma string e uma Series com & e gerar TypeError.

Os operadores and, or e not do Python esperam um único valor lógico, não uma coluna de valores lógicos. Usá-los em máscaras gera o ValueError de valor lógico ambíguo. Um simples if orders["quantity"] > 1: tem o mesmo problema. Use .any() para perguntar se alguma linha corresponde ou .all() para perguntar se todas correspondem.

Contar correspondências e proporções

is_stationery.sum() é 3 porque True conta como 1 e False como 0. is_stationery.mean() é 0,5, a fração dos seis pedidos que correspondem à condição. Multiplique por 100 para expressá-la como 50%.

Tratar valores ausentes explicitamente

Com a coluna original de quantidade float64, comparações que envolvem NaN produzem False, exceto !=, que produz True. quantity >= 1 mantém cinco linhas; quantity < 1 não mantém nenhuma. A quantidade em branco não está em nenhuma das seleções. Ainda assim, quantity != 3 inclui essa linha em branco, então ser diferente não significa ser conhecido e diferente.

Após a conversão para Int64 com suporte a valores ausentes, a comparação com <NA> produz <NA>, e a filtragem exclui essas linhas. Use isna() ou notna() quando a pergunta disser respeito a lacunas.

Para selecionar colunas além de linhas, use orders.loc[is_home, "product"]. Ele retorna Desk lamp e Mug. Uma máscara nomeada pode ser reutilizada para inspecionar, contar e atualizar o mesmo conjunto de linhas.

Principais conclusões

  • Uma comparação cria um resultado booleano por linha; a filtragem mantém as linhas True e preserva os rótulos.
  • Combine máscaras com &, | e ~, usando parênteses ao redor das comparações.
  • Use .any() ou .all() quando for necessário um único valor lógico.
  • A soma de uma máscara booleana conta as correspondências, e sua média fornece a proporção delas.
  • Verifique lacunas explicitamente: o NaN de ponto flutuante e o <NA> de tipos com suporte a valores ausentes se comportam de modo diferente em comparações.
  • A igualdade entre textos diferencia maiúsculas de minúsculas e considera os espaços.

4.2 Usar métodos auxiliares e query para filtros comuns

Alguns filtros têm formas conhecidas: pertencimento a uma lista, um intervalo numérico, um valor ausente ou um fragmento de texto. Métodos auxiliares expressam esses testes diretamente e ainda produzem máscaras que podem ser combinadas com outras condições.

Testar pertencimento e intervalos
orders[orders["category"].isin(["Home", "Bags"])]
orders[orders["unit_price"].between(4.75, 18)]

isin encontra correspondências com qualquer valor listado. A primeira seleção contém os pedidos 1002, 1004 e 1005. ~orders["category"].isin(["Home"]) inverte o teste de pertencimento e mantém as linhas de Stationery e Bags. Uma expressão in do Python não cria essa máscara de pertencimento linha por linha.

between inclui ambos os extremos por padrão. A segunda seleção inclui Desk lamp a 18,0, Pen set a 4,75 e Mug a 6,0. Use inclusive="neither" para excluir ambos os extremos, "left" para incluir apenas o extremo inferior ou "right" para incluir apenas o extremo superior. Escolha a regra dos extremos de acordo com a pergunta feita.

Encontrar entradas ausentes e presentes

orders[orders["quantity"].isna()] mantém o pedido 1006. notna() faz o contrário, mantendo as quantidades registradas. Não teste igualdade com np.nan: NaN é diferente até de si mesmo, então quantity == np.nan não encontra a linha ausente.

Procurar dentro do texto
orders[orders["product"].str.contains("note", case=False, na=False)]

str.contains testa se cada valor de texto contém uma correspondência. Ignorar maiúsculas e minúsculas encontra ambas as linhas com Notebook. na=False faz com que texto ausente conte como sem correspondência. Por padrão, a busca trata seu padrão como uma expressão regular; para um fragmento de texto literal com pontuação, regex=False evita interpretar essa pontuação como um padrão. str.startswith e str.endswith testam o início e o fim.

Escrever um filtro como consulta
orders.query("quantity >= 2 and unit_price < 5")

Isso mantém os pedidos 1001 e 1003. Dentro de uma string de query, nomes de colunas representam colunas e and, or e not são permitidos. A string é uma expressão de consulta do pandas; sua sintaxe difere daquela usada para combinar Series diretamente no Python comum.

Uma variável Python precisa de @:

limit = 5
orders.query("unit_price > @limit")

O resultado contém Desk lamp, Mug e Backpack. Um nome de coluna que contém espaço precisa ficar entre crases dentro da consulta, como em orders.query("`unit price` > 5").

A mesma pergunta pode ser escrita como uma máscara, uma chamada de método auxiliar ou uma consulta. Prefira a forma que exponha a regra com clareza. Para um intervalo, between reúne os limites e a regra de inclusão. Para um conjunto de rótulos permitidos, isin evita repetir testes de igualdade. Quando um filtro se comportar de modo inesperado, inspecione a máscara e os valores exatos da coluna antes de alterar a condição.

Principais conclusões

  • isin testa pertencimento e ~ inverte a máscara.
  • between inclui ambos os extremos, a menos que inclusive altere a regra.
  • isna e notna detectam lacunas e valores registrados.
  • str.contains procura texto; case=False ignora maiúsculas e minúsculas e na=False exclui texto ausente.
  • Dentro de query, as colunas são nomeadas diretamente, variáveis Python usam @ e nomes de colunas com espaços usam crases.

4.3 Alterar valores nas linhas selecionadas com segurança

Uma atualização precisa ter como alvo a tabela que você pretende alterar. No pandas 3, uma seleção se comporta como um objeto separado sob a cópia na escrita, então alterar um objeto selecionado não altera sua tabela de origem.

Colocar todo o alvo em uma atribuição com loc
sale = orders.copy()
is_home = sale["category"] == "Home"
sale.loc[is_home, "unit_price"] *= 0.9

A máscara seleciona duas linhas de Home. O seletor de coluna direciona a operação aos seus preços. A multiplicação por 0,9 mantém 90% de cada preço, reduzindo 18,00 para 16,20 e 6,00 para 5,40. As outras linhas não são alteradas. A forma expandida lê a mesma seleção no lado direito e atribui seus valores multiplicados no lado esquerdo.

Aqui, sale é uma tabela separada usada para uma alteração de preços, deixando orders disponível para comparação. Para atualizar a tabela original, coloque o próprio orders.loc[...] no lado esquerdo da atribuição.

Evitar atribuição encadeada
orders[orders["category"] == "Home"]["unit_price"] = 0

Isso usa duas etapas de indexação. A primeira produz um objeto selecionado; a segunda atribui valores a esse objeto. No pandas 3, isso nunca atualiza orders, e um aviso ChainedAssignmentError aponta o problema. A mesma questão afeta orders["unit_price"][1] = 0.

Use orders.loc[orders["category"] == "Home", "unit_price"] = 0 quando a alteração desejada for na tabela original. A tabela, as linhas correspondentes e a coluna são especificadas em uma única atribuição.

Entender tabelas selecionadas

Após home = orders[orders["category"] == "Home"], alterar home["unit_price"] altera apenas home. Alterações posteriores em orders também não alteram home. Os objetos podem compartilhar armazenamento internamente até que uma gravação seja necessária, mas seus valores visíveis se comportam de forma independente.

Exemplos mais antigos de pandas podem mostrar SettingWithCopyWarning e usar .copy() após a seleção para evitar atualizações incertas. O pandas 3 removeu esse aviso e tornou consistente a independência das seleções. Um .copy() explícito ainda é útil para declarar a intenção, mas uma seleção já se comporta de forma independente nas atualizações.

Associar os valores do lado direito ao alvo

Um escalar preenche todas as células selecionadas. Uma lista precisa de exatamente um valor por linha selecionada e as preenche na ordem da seleção. Uma Series se alinha pelo rótulo do índice:

new_prices = pd.Series([16.2, 5.4], index=[1, 3])
sale.loc[is_home, "unit_price"] = new_prices

As linhas de Home têm os rótulos 1 e 3, então recebem 16,2 e 5,4. Se um rótulo selecionado estivesse ausente da Series, seu valor atribuído seria NaN; linhas fora da seleção permaneceriam inalteradas. Comprimentos iguais, por si só, não estabelecem uma correspondência entre a Series e as linhas.

Inspecione sale.loc[is_home, "unit_price"] após a alteração e compare-o com orders.loc[is_home, "unit_price"]. O .sum() da máscara é 2, o que fornece o número esperado de linhas selecionadas para esse desconto.

Principais conclusões

  • Atualize a tabela desejada por meio de uma única atribuição loc[mask, column].
  • No pandas 3, a atribuição encadeada nunca atualiza a tabela original.
  • Seleções se comportam de forma independente sob a cópia na escrita.
  • Um escalar preenche a seleção; uma lista segue a ordem; uma Series se alinha por rótulo.
5

Adicionar e transformar colunas

Colunas derivadas expressam relações já presentes em uma tabela: quantidade e preço se tornam receita, enquanto uma condição se torna um rótulo de categoria. Use aritmética vetorizada e pequenas transformações para declarar essas regras com clareza. Você também escolherá entre mapear todos os valores e substituir alguns, manterá resultados por atribuição e considerará entradas ausentes e alinhamento por rótulos quando novos valores entrarem em uma tabela.

5.1 Calcular novas colunas a partir das existentes

Novas colunas transformam dados registrados em quantidades que você pode analisar. Um cálculo entre colunas funciona linha por linha, enquanto o índice mantém cada resultado ligado à sua observação.

Calcular receita
orders["revenue"] = orders["quantity"] * orders["unit_price"]

As seis receitas são 7,5; 18,0; 9,5; 24,0; 35,0 e NaN. Para a primeira linha, três itens a 2,50 cada produzem 7,50. A última linha tem uma quantidade desconhecida, então sua receita também é desconhecida. Atribuir a um novo nome adiciona uma coluna à direita; atribuir a um nome existente sobrescreve essa coluna.

A aritmética entre colunas é vetorizada. Ela expressa uma regra para a coluna inteira e evita um laço Python sobre as linhas. Em tabelas grandes, isso é muito mais rápido que for ou iterrows, e a expressão torna clara a relação entre as entradas.

Usar os valores registrados em um total

orders["revenue"].sum() ignora NaN e produz 94,0, o total das cinco receitas conhecidas. .mean() produz 18,8 porque o denominador é de cinco receitas registradas. Dividir 94,0 pelas seis linhas trataria silenciosamente a receita ausente como se ela contribuísse com um zero conhecido.

Para calcular as participações percentuais:

orders["share_pct"] = (
    orders["revenue"] / orders["revenue"].sum() * 100
).round(1)

As participações são 8,0; 19,1; 10,1; 25,5; 37,2 e NaN. Essas são participações no total conhecido. A entrada ausente permanece ausente ao longo da aritmética.

Retornar uma tabela com assign

assign retorna um novo DataFrame com colunas adicionadas ou substituídas, deixando sua entrada inalterada. Ele funciona naturalmente em uma sequência de métodos:

with_tax = orders.assign(
    tax=lambda d: (d["revenue"] * 0.2).round(2)
)

A lambda lê a tabela naquele ponto da sequência. Ela produz valores de imposto de 1,5; 3,6; 1,9; 4,8; 7,0 e NaN. No pandas 3, pd.col("revenue") * 0.2 é outra maneira de se referir a uma coluna em assign.

Cálculos decimais podem revelar pequenos erros de representação binária de ponto flutuante: 9,5 vezes 0,2 pode ser armazenado como 1.9000000000000001. .round(2) fornece um valor útil para apresentação. Evite testes de igualdade exata em decimais calculados quando pequenos erros de representação forem possíveis.

Saber como a atribuição associa linhas
orders["home_price"] = orders.loc[
    orders["category"] == "Home", "unit_price"
]

A Series atribuída tem os rótulos 1 e 3. Essas linhas recebem 18,0 e 6,0; todas as outras recebem NaN. A atribuição de uma Series associa rótulos, mesmo quando seu comprimento difere do da tabela. Uma lista comum não tem rótulos e deve conter exatamente um valor por linha. Um escalar, como orders["currency"] = "EUR", preenche todas as linhas.

Derivar valores de texto ou datas

Os acessores .str e .dt também fornecem operações vetorizadas em colunas. orders["product"].str.upper() produz nomes em maiúsculas, e .str.len() fornece comprimentos 8, 9, 7, 3, 8 e 8. Atribua esses resultados a uma nova coluna quando tanto os valores originais quanto os derivados forem úteis.

Principais conclusões

  • Atribuir uma expressão de coluna armazena um resultado por linha.
  • Entradas desconhecidas geralmente produzem resultados aritméticos desconhecidos; resumos ignoram valores ausentes por padrão.
  • Operações vetorizadas em colunas evitam laços sobre linhas.
  • assign retorna um novo DataFrame e pode se referir a colunas por meio de uma lambda.
  • A atribuição de Series associa rótulos; a atribuição de lista segue a ordem e o comprimento das linhas.
  • Use .str e .dt para colunas derivadas de texto e datas.

5.2 Recodificar e transformar valores com np.where, map e apply

Transformar uma coluna pode significar aplicar uma regra numérica, atribuir um rótulo ou traduzir rótulos existentes. Escolha um método cujo comportamento corresponda à regra, especialmente para valores que ela não menciona.

Transformar uma condição em rótulos
orders["price_band"] = np.where(
    orders["unit_price"] >= 5, "high", "low"
)

np.where escolhe seu segundo argumento quando a condição é True e seu terceiro quando ela é False. Para os preços 2,50; 18,00; 4,75; 6,00; 35,00 e 2,50, os rótulos são low, high, low, high, high e low. O >= inclui um preço exatamente igual a 5.

Traduzir todos os valores ou alterar alguns
codes = {"Stationery": "ST", "Home": "HM", "Bags": "BG"}
orders["category_code"] = orders["category"].map(codes)

map com dicionário produz ST, HM, ST, HM, BG e ST. Um valor ausente do dicionário se torna NaN. Com apenas {"Stationery": "ST"}, tanto Home quanto Bags se tornam ausentes. Use um mapeamento completo quando cada categoria precisar de um código traduzido.

replace altera valores listados e deixa os não listados inalterados. orders["category"].replace({"Bags": "Luggage"}) mantém Stationery e Home enquanto renomeia Bags.

Alteração desejadaMétodo adequado
Dar um código a cada categoria conhecidamap com um dicionário
Renomear alguns rótulos existentesreplace
Escolher entre duas saídas a partir de uma condiçãonp.where
Aplicar uma função personalizada

Uma Series pode passar cada valor a uma função por meio de map ou apply. orders["product"].apply(len) retorna o comprimento do nome de cada produto. Passe o próprio len; len() o chamaria imediatamente sem um valor.

Uma lambda pode expressar uma pequena regra para valores: orders["unit_price"].apply(lambda p: "budget" if p < 5 else "standard"). Isso retorna budget, standard, budget, standard, standard e budget.

Para uma lógica que exige várias células em uma linha, o apply de DataFrame aceita axis=1:

orders.apply(
    lambda r: r["quantity"] * r["unit_price"], axis=1
)

A função lê a quantidade e o preço de cada linha. Para essa operação, a multiplicação direta de colunas é mais clara e muito mais rápida em uma tabela grande. Use expressões vetorizadas ou np.where quando puderem expressar o cálculo; reserve funções por linha para lógicas que precisem delas.

Usar transformações numéricas disponíveis

round(n) arredonda para n casas decimais, abs() fornece valores absolutos e clip(lower=..., upper=...) limita valores aos limites informados. orders["unit_price"].clip(upper=20) altera 35,0 para 20,0 e deixa os outros cinco preços inalterados. Ele não remove a linha de preço alto.

Essas transformações retornam novos valores. Atribua-os a uma nova coluna para preservar a entrada para verificação ou sobrescreva a original quando essa for a intenção. Inspecione algumas linhas transformadas ou execute value_counts() para verificar se os novos rótulos e suas contagens correspondem à regra.

Principais conclusões

  • np.where seleciona uma saída para o caso verdadeiro ou falso de cada valor da condição.
  • map com dicionário torna ausentes os valores não listados; replace os mantém.
  • Passe a própria função a apply; use axis=1 para uma função aplicada às linhas de um DataFrame.
  • Prefira operações vetorizadas quando expressarem a regra.
  • clip limita valores, enquanto round e abs os transformam sem selecionar linhas.
6

Ordenar dados, atribuir postos e resumir dados

Uma tabela ordenada e um resumo estatístico compacto respondem a perguntas diferentes sobre as mesmas observações. Ordene registros, atribua postos com uma regra deliberada para empates e escolha contagens, medidas de tendência central ou de dispersão adequadas aos dados. Depois, examine proporções de categorias e relações numéricas. Valores ausentes, direção da classificação, denominadores amostrais e limites da correlação afetam a interpretação de um resultado.

6.1 Ordenar linhas por valores ou pelo índice

Ordenar altera a ordem em que as observações aparecem. A operação mantém juntos os valores de cada linha e leva consigo o rótulo da linha. Decida o que tem prioridade e como valores empatados devem ser ordenados antes de selecionar os maiores ou menores.

Ordenar uma coluna
scores = pd.DataFrame({
    "name": ["Ana", "Ben", "Chen", "Dara", "Eli"],
    "points": [88, 92, 88, 75, 92]
})
ordered = scores.sort_values("points")

Por padrão, o menor vem primeiro. Os 75 de Dara vêm primeiro, seguidos dos dois valores 88 e depois dos dois valores 92. Os rótulos das linhas se movem com os registros. Entre empates, o algoritmo de ordenação padrão não garante a ordem original; os rótulos exibidos podem ser 3, 0, 2, 1, 4, mas não se deve presumir que linhas empatadas mantenham essa ordem.

Use ascending=False para colocar o maior primeiro. sort_values retorna uma tabela, deixando scores inalterado, a menos que seu resultado seja atribuído.

Escolher como resolver empates
scores.sort_values(
    ["points", "name"], ascending=[False, True]
)

A primeira chave tem prioridade. Os pontos diminuem; os nomes aumentam dentro de pontuações iguais. A ordem é Ben, Eli, Ana, Chen e Dara. Ordenar nomes primeiro responderia a uma pergunta diferente porque tornaria os nomes a chave principal.

Quando empates em uma coluna devem preservar a ordem de entrada, use scores.sort_values("points", kind="stable"). A estabilidade mantém as linhas empatadas em sua sequência atual. Uma chave secundária, por sua vez, dá aos empates uma regra explícita de ordenação.

Posicionar valores ausentes e texto

Valores ausentes vão para o fim por padrão, tanto na ordenação crescente quanto na decrescente. pd.Series([3.0, np.nan, 1.0]).sort_values() produz 1,0; 3,0 e depois NaN. na_position="first" move a entrada ausente para o início; inverter apenas a direção da ordenação não faz isso.

A ordenação de texto segue os códigos dos caracteres. "Zebra" vem antes de "apple" porque letras maiúsculas e minúsculas ocupam intervalos diferentes. Nomes escritos de forma consistente, como Bags, Home e Stationery, são ordenados na ordem alfabética esperada.

Ordenar rótulos ou renumerá-los

sort_index() ordena os rótulos das linhas, não os valores dos dados. Após ordenar por pontos, ele pode restaurar a ordem original dos rótulos padrão. sort_index(ascending=False) inverte a ordem dos rótulos. Já reset_index(drop=True) mantém a ordem atual das linhas e substitui seus rótulos por 0, 1, 2 e assim por diante.

Selecionar as linhas com maiores ou menores valores

scores.nlargest(2, "points") retorna Ben e Eli, ambos com 92. nsmallest seleciona valores baixos. Se o corte ocorrer em um empate, decida se deseja manter todas as linhas empatadas. scores.nlargest(1, "points", keep="all") retorna os dois valores 92, embora n seja 1. O número solicitado é então um ponto de corte, não uma garantia sobre a contagem final de linhas.

Principais conclusões

  • sort_values ordena linhas pelos valores dos dados; sort_index ordena rótulos de linhas.
  • ascending=False coloca valores altos primeiro, enquanto valores ausentes ainda vão para o fim por padrão.
  • Várias chaves de ordenação são aplicadas em ordem de prioridade e podem usar direções diferentes.
  • Use uma chave secundária ou uma ordenação estável de uma coluna quando a ordem dos empates importar.
  • reset_index(drop=True) renumera a ordem atual sem ordená-la novamente.
  • keep="all" em uma seleção dos maiores valores pode retornar mais de n linhas.

6.2 Atribuir postos aos valores e tratar empates

Um posto registra a posição de um valor na ordem classificada sem mover sua linha. Isso é útil quando cada observação precisa de um número de posição junto aos dados originais. Empates precisam de uma regra porque vários valores podem ocupar a mesma parte dessa ordem.

Escolher a direção

scores["points"].rank() atribui postos do menor para o maior. Use ascending=False para uma tabela de resultados em que pontuações altas devem receber os melhores postos. O método para empates decide então qual número de posição cada grupo empatado recebe.

As pontuações do exemplo na ordem das linhas são Ana 88, Ben 92, Chen 88, Dara 75 e Eli 92. Em ordem decrescente, os valores 92 ocupam as posições 1 e 2, os valores 88 ocupam as posições 3 e 4, e 75 ocupa a posição 5. O padrão method="average" atribui a cada valor empatado a média das posições que ele ocupa. Os valores retornados, na ordem original das linhas, são 3,5; 1,5; 3,5; 5,0 e 1,5.

Escolher um método para empates
MétodoPostos decrescentes na ordem original das linhasRegra para empates
average3,5; 1,5; 3,5; 5,0; 1,5Média dos postos ocupados
min3, 1, 3, 5, 1Menor posto ocupado
max4, 2, 4, 5, 2Maior posto ocupado
dense2, 1, 2, 3, 1Um posto por valor distinto, sem lacunas
first3, 1, 4, 5, 2Postos separados na ordem de ocorrência

Com min, dois vencedores no posto 1 significam que a próxima pontuação começa no posto 3. Com dense, a próxima pontuação distinta começa no posto 2. first desempata mesmo quando as próprias pontuações não fornecem motivo para preferir uma pessoa; ele segue a ordem de entrada.

Os resultados dos postos são números de ponto flutuante, permitindo valores como 1,5. Quando o método escolhido para empates fornece postos inteiros e nenhum está ausente, .astype(int) os converte para exibição. Um tipo inteiro comum não pode armazenar um posto ausente.

Expressar postos como frações

Para o método padrão da média e valores não ausentes, rank(pct=True) divide cada posto pelo número de valores classificados. Classificar as cinco pontuações do exemplo em ordem crescente produz 2,5; 4,5; 2,5; 1,0 e 4,5. Dividir por cinco produz 0,5; 0,9; 0,5; 0,2 e 0,9.

Os maiores valores empatados recebem 0,9, não 1, porque seu posto médio é 4,5. Um posto percentílico descreve a posição relativa aos valores classificados; ele não é uma porcentagem da própria pontuação.

Tratar postos ausentes e armazenar resultados

Valores ausentes mantêm postos NaN por padrão. Com as receitas 7,5; 18,0; 9,5; 24,0; 35,0 e NaN, os postos decrescentes são 5, 3, 4, 2, 1 e NaN. na_option="bottom" coloca a entrada ausente após os valores registrados, atribuindo-lhe o posto 6.

scores["place"] = scores["points"].rank(
    method="min", ascending=False
)

As linhas permanecem Ana, Ben, Chen, Dara e Eli. A nova coluna de posição registra 3, 1, 3, 5 e 1. Ordene separadamente se a exibição deve mostrar os vencedores primeiro.

Principais conclusões

  • A atribuição de postos define posições sem mover linhas; a classificação decrescente dá números de posto baixos a valores altos.
  • Métodos para empates controlam se postos compartilhados deixam lacunas ou seguem a ordem de entrada.
  • O método padrão da média pode retornar postos fracionários.
  • Com o método padrão da média, pct=True divide pelo número de valores classificados.
  • Valores ausentes mantêm postos ausentes por padrão; na_option="bottom" coloca-os por último.

6.3 Resumir colunas com estatísticas descritivas

Uma estatística descritiva resume muitas observações em uma quantidade útil. Escolha uma estatística adequada à pergunta e leia sua contagem de valores não ausentes para saber quantos dados a sustentam.

Calcular medidas de tendência central e dispersão
weather = pd.DataFrame({
    "temp_c": [14.0, 17.5, 16.0, 21.0, 19.5, 12.5, 15.0],
    "rain_mm": [0.0, 2.4, 0.0, 0.0, 5.1, 12.3, 0.8]
}, index=["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])

Para weather["temp_c"], sum() é 115,5, mean() é 16,5 e median() é 16,0. O mínimo é 12,5 e o máximo é 21,0, produzindo uma amplitude de 8,5 °C. idxmax() retorna o rótulo "Thu", enquanto idxmin() retorna "Sat": eles identificam observações em vez de retornar os próprios valores extremos.

std() e var() medem a dispersão. O pandas usa o denominador amostral por padrão, ddof=1, dividindo os desvios quadráticos por um a menos que a contagem. Aqui o desvio padrão é aproximadamente 3,028 °C e a variância é aproximadamente 9,167 graus Celsius quadrados. std(ddof=0) usa a própria contagem e produz aproximadamente 2,803 °C. A função np.std do NumPy usa ddof=0 por padrão, então iguale a configuração antes de comparar resultados.

Ler quartis e describe

quantile(0.25) fornece o quartil inferior, 14,5; quantile(0.5) fornece a mediana, 16,0; quantile(0.75) fornece o quartil superior, 18,5. A interpolação padrão pode retornar um valor entre medições registradas.

weather.describe() combina contagem, média, desvio padrão, mínimo, os três quartis e máximo para colunas numéricas. A chuva tem média de aproximadamente 2,94 mm e mediana de 0,8 mm. A medição de 12,3 mm eleva a média; a mediana descreve melhor um dia típico nessa semana com assimetria à direita.

Considerar valores ausentes e tipos

Para pd.Series([1, np.nan, 3]), .mean() é 2,0 porque valores ausentes são ignorados por padrão. .count() é 2, enquanto .size é 3. Com skipna=False, a média é NaN. Não use a contagem total de linhas como denominador para a média padrão quando algumas entradas estiverem ausentes.

Resumos de texto são diferentes. orders["category"].describe() produz count 6, unique 3, top Stationery e freq 3. Calcular a média da tabela de pedidos com texto misturado gera TypeError; use orders.mean(numeric_only=True) ou selecione colunas numéricas com select_dtypes("number").

Resumir ao longo de um eixo

Por padrão, estatísticas de DataFrame reduzem ao longo das linhas para um resultado por coluna. axis=1 fornece um resultado por linha; selecione quantidades cujas unidades possam ser combinadas de modo sensato.

orders[["quantity", "unit_price"]].agg(["mean", "max"])

agg calcula várias estatísticas nomeadas em conjunto. Quantity tem média 2,2 e máximo 4,0; unit_price tem média de aproximadamente 11,46 e máximo 35,0. weather["rain_mm"].cumsum() fornece os totais acumulados 0,0; 2,4; 2,4; 2,4; 7,5; 19,8 e 20,6 mm, preservando um resultado por dia.

Principais conclusões

  • Escolha totais, medidas de tendência central ou de dispersão adequados à pergunta.
  • describe reúne estatísticas numéricas comuns; colunas de texto têm resumos baseados em frequência.
  • count exclui valores ausentes, enquanto size os inclui.
  • O desvio padrão do pandas usa ddof=1; o NumPy usa ddof=0 por padrão.
  • Quantis podem interpolar entre medições.
  • idxmax e idxmin retornam rótulos; cumsum retorna totais acumulados.
  • agg solicita várias estatísticas, e axis controla a direção da redução.

6.4 Contar valores e medir relações

Contagens descrevem quantas vezes valores ocorrem; correlações descrevem como duas variáveis numéricas variam em conjunto. Ambos os resumos precisam de interpretação: o que está sendo contado, o que está ausente e qual relação a estatística mede.

Contar categorias ou listar valores distintos

orders["category"].value_counts() produz Stationery 3, Home 2 e Bags 1, ordenados por frequência. A Series retornada se chama count. Entradas ausentes são excluídas por padrão; dropna=False as inclui como uma contagem separada.

orders["category"].value_counts(normalize=True)

A Series normalizada se chama proportion: Stationery é 0,5, Home é aproximadamente 0,333 e Bags é aproximadamente 0,167. Multiplicar por 100 expressa porcentagens. Com a regra padrão para valores ausentes, essas proporções descrevem os valores presentes.

PerguntaMétodo
Quantas vezes cada valor ocorre?value_counts()
Quais valores distintos ocorrem?unique()
Quantos valores presentes distintos ocorrem?nunique()
Qual valor ou quais valores ocorrem com maior frequência?mode()

unique() mantém a ordem da primeira ocorrência: Stationery, Home, Bags. mode() retorna uma Series porque vários valores podem empatar pela maior frequência. Ele não solicita um único vencedor escolhido arbitrariamente.

Condições podem ser contadas diretamente. (weather["rain_mm"] > 0).sum() conta quatro dias chuvosos. Seu .mean() é aproximadamente 0,571, então cerca de 57% dos sete dias tiveram chuva.

Medir uma relação linear

weather["temp_c"].corr(weather["rain_mm"]) fornece uma correlação de Pearson de aproximadamente −0,397. Seu sinal negativo indica que dias mais quentes tenderam a ter menos chuva nessas observações. Sua magnitude descreve quão bem um padrão linear se ajusta aos dados, em uma escala de −1, passando por 0, até 1.

Um valor de 1 significa uma relação linear crescente perfeita; −1 significa uma relação decrescente perfeita. Um valor próximo de zero significa pouca associação linear. Uma relação curva ainda pode ser forte mesmo quando a correlação de Pearson está próxima de zero. Correlação também diz respeito à associação, não é evidência de que alterar uma variável cause a alteração da outra.

Ler uma matriz de correlação

weather.corr() fornece todos os pares numéricos em conjunto. A matriz é simétrica: temperatura com chuva tem a mesma correlação que chuva com temperatura. Uma coluna numérica que varia tem correlação 1 consigo mesma; uma coluna constante não tem correlação definida e produz NaN.

Para relações que aumentam ou diminuem consistentemente sem seguir uma linha reta, method="spearman" calcula a correlação a partir dos postos. O método altera o tipo de padrão resumido, então informe-o ao relatar um resultado.

O cálculo meteorológico usa apenas sete medições. Ele descreve essa pequena semana observada; afirmações fortes sobre um padrão climático mais amplo precisam de mais evidências. Um relatório útil inclui as variáveis, o sinal e o tamanho do coeficiente, o método e o número de observações.

Principais conclusões

  • value_counts apresenta frequências; a normalização apresenta proporções dos valores contados.
  • unique, nunique e mode respondem a perguntas diferentes sobre valores distintos e frequentes.
  • A soma de uma condição conta correspondências, e sua média fornece uma proporção.
  • A correlação de Pearson mede associação linear de −1 a 1.
  • Uma matriz de correlação é simétrica; colunas constantes produzem correlações indefinidas.
  • A correlação de Spearman opera sobre postos, e a correlação sozinha não estabelece causa.

Exercícios resolvidos de Series e DataFrames no pandas

6 Lições Interativas

1

Construir uma tabela com rótulos significativos

12 passos
Criar dados com rótulos, prever o alinhamento e escolher um índice para consultas confiáveis.
  1. 1
    IntroduçãoManter valores ligados ao seu significado

    Uma lista fornece valores em uma ordem. O pandas adiciona rótulos para que você possa identificar o que cada valor descreve, mesmo depois que as linhas se movem. Comece com uma variável com rótulos, depois combine várias variáveis em uma tabela.

    A pergunta principal é se uma operação segue a identidade de uma linha ou sua posição atual. Essa distinção explica tanto a aritmética de Series quanto a escolha de um índice útil para uma tabela.

  2. 2
    ExemploConstruir uma Series de chuva com rótulos

    Crie três medições de chuva em milímetros:

    rain = pd.Series([4.5, 3.0, 6.2],
        index=["Mon", "Tue", "Wed"], name="rain_mm")
    

    Os valores e rótulos são pareados em ordem. rain["Tue"] fornece 3,0, enquanto rain.iloc[0] fornece 4,5. A primeira solicitação nomeia um dia; a segunda nomeia uma posição. .dtype é float64, e .size é 3.

  3. 3
    ExplicaçãoAplicar uma regra a cada valor

    Uma Series permite operações vetorizadas: rain * 2 dobra cada medição e mantém os rótulos dos dias. rain > 4 produz True, False e True, novamente com rótulos por dia.

    Use atributos como .index, .name e .dtype sem parênteses. Quando precisar dos valores como um array do NumPy, chame .to_numpy(); .values pode retornar um array do pandas para alguns tipos de dados.

  4. 4
    ExemploSomar por rótulo, não pela linha exibida

    Suponha que a contenha x 1, y 2 e z 3, enquanto b contém y 10, z 20 e w 30. Em a + b, y é pareado com y, produzindo 12,0, e z é pareado com z, produzindo 23,0.

    Os rótulos x e w não têm correspondência, então seus resultados são NaN. a.add(b, fill_value=0) fornece x 1,0 e w 30,0. Uma posição de linha compartilhada não associa entradas com rótulos diferentes.

  5. 5
    DesafioPrever uma soma alinhada

    Uma Series tem os rótulos a e b com valores 4 e 7. Outra tem os rótulos b e c com valores 3 e 9. Quais são os resultados não ausentes da adição comum?

    ---reveal---

    Apenas b está presente em ambas as entradas. Sua soma é 7 mais 3, produzindo 10,0. Os rótulos a e c têm resultados ausentes. Somar o primeiro ao primeiro associaria incorretamente a a b.

  6. 6
    ExemploConstruir várias variáveis em colunas

    Crie uma pequena tabela de pedidos:

    df = pd.DataFrame({"product": ["Notebook", "Mug"],
        "quantity": [3, 4], "unit_price": [2.5, 6.0]})
    

    Cada lista fornece uma coluna e deve ter um valor por linha. As colunas compartilham os rótulos de índice 0 e 1, mas mantêm seus próprios tipos de dados. .shape é (2, 3), enquanto .size é 6 porque conta cada célula.

  7. 7
    Ideia-chaveManter a forma necessária à próxima etapa

    df["quantity"] retorna uma Series. df[["quantity"]] retorna um DataFrame de uma coluna porque a lista interna solicita uma coleção de colunas.

    Essa é uma diferença de estrutura, embora os valores visíveis sejam iguais. Colchetes também evitam conflitos de nomes: uma coluna chamada size precisa de df["size"], pois df.size significa a contagem de células do DataFrame.

  8. 8
    DesafioEscolher a direção de um total

    Para as colunas a [1, 2] e b [3, 4], o que uma soma por linha retorna e qual eixo a solicita?

    ---reveal---

    Use df.sum(axis=1). A primeira linha fornece 1 mais 3, ou 4; a segunda fornece 2 mais 4, ou 6. O eixo padrão opera ao longo das linhas e forneceria, em vez disso, os totais de coluna a 3 e b 7.

  9. 9
    ExemploUsar o identificador do pedido como índice

    Para uma tabela com uma coluna order_id, salve by_id = orders.set_index("order_id"). Os números de pedido passam para o índice de linhas e saem das colunas comuns.

    Uma consulta como by_id.loc[1004] agora identifica um pedido em vez de sua localização atual. Verifique by_id.index.is_unique antes de depender de cada número para identificar exatamente uma linha; o pandas permite rótulos duplicados.

  10. 10
    DicaSalvar uma alteração de rótulos

    rename, drop, set_index e reset_index retornam novas tabelas. Mantenha o resultado com uma atribuição, como orders = orders.rename(columns={"unit_price": "price"}).

    Uma atribuição omitida deixa a tabela antiga no lugar. Um nome antigo de coluna escrito incorretamente em rename é ignorado por padrão, então inspecione .columns quando o novo nome esperado estiver ausente.

  11. 11
    DesafioRestaurar identificadores sem perdê-los

    Uma tabela usa identificadores de pedidos como índice. Você precisa de um índice de linhas padrão e ainda precisa dos identificadores como dados. Qual operação deve salvar?

    ---reveal---

    Salve df = df.reset_index(). Ele preserva o índice antigo como uma coluna e fornece os rótulos 0, 1, 2 e assim por diante. Usar drop=True descartaria esses identificadores. A ordem das linhas permanece a mesma.

  12. 12
    RecapitulaçãoPrever identidade, tipo e forma

    Antes de ler um resultado, verifique três coisas: quais rótulos identificam seus valores, qual tipo de dados os armazena e quantos eixos a seleção mantém.

    A aritmética de Series segue os rótulos. Um DataFrame organiza variáveis em colunas com tipos definidos. Alterações de índice permitem que um identificador significativo dê suporte a consultas posteriores, desde que a tabela retornada seja salva e seus rótulos identifiquem as linhas de forma única.

2

Carregar um CSV e verificar seu significado

13 passos
Ler um arquivo, investigar problemas estruturais e manter tipos numéricos e de datas úteis.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoTratar o carregamento como uma etapa verificável
  2. 2
    ExplicaçãoLer registros em uma tabela
  3. 3
    ExemploAjustar separadores e marcas decimais
  4. 4
    DicaPreservar códigos durante a leitura
  5. 5
    DesafioManter o primeiro registro
  6. 6
    ExemploVerificar a estrutura visível
  7. 7
    ExplicaçãoContar o que está presente e ausente
  8. 8
    DesafioVerificar um identificador e uma medição
  9. 9
    ExemploConverter texto numérico e investigar uma falha
  10. 10
    Ideia-chaveManter contagens ausentes como inteiros
  11. 11
    ExemploDisponibilizar operações com datas
  12. 12
    DesafioCorrigir uma importação numérica
  13. 13
    RecapitulaçãoRelacionar estrutura, tipos e contagens
3

Selecionar linhas por identidade ou localização

10 passos
Comparar loc e iloc, prever extremos de fatias e manter a forma de resultado necessária.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoPerguntar se importa a identidade ou a localização
  2. 2
    ExemploLer um pedido conhecido
  3. 3
    ExemploLer um intervalo inclusivo de rótulos
  4. 4
    DesafioManter uma tabela de uma linha
  5. 5
    ExemploLer um intervalo por posições
  6. 6
    DicaLer de trás para a frente e além do fim
  7. 7
    DesafioPrever uma linha ou um valor
  8. 8
    ConexãoUsar uma forma curta para uma célula
  9. 9
    DesafioAcompanhar uma linha durante a ordenação
  10. 10
    RecapitulaçãoInformar o seletor e a forma
4

Filtrar registros e atualizar a tabela certa

13 passos
Construir uma condição, combinar testes e fazer uma alteração direcionada sob a cópia na escrita.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoTransformar uma pergunta sobre dados em um teste de linhas
  2. 2
    ExemploConstruir uma máscara booleana
  3. 3
    ExplicaçãoExigir ambas as condições
  4. 4
    DicaUsar um único valor lógico apenas quando necessário
  5. 5
    DesafioContar uma condição combinada
  6. 6
    ExemploExpressar um intervalo diretamente
  7. 7
    Ideia-chaveEncontrar lacunas com um teste de valor ausente
  8. 8
    DesafioTraduzir um filtro para query
  9. 9
    ExemploDar desconto exatamente aos preços de Home
  10. 10
    ExplicaçãoEntender por que uma cadeia não altera a origem
  11. 11
    DicaAssociar valores de atualização por rótulo
  12. 12
    DesafioCombinar filtragem e atualização
  13. 13
    RecapitulaçãoTornar condições e alvos explícitos
5

Transformar colunas existentes em novos dados úteis

12 passos
Calcular receita, manter valores ausentes e escolher métodos adequados de mapeamento e transformação.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoExpressar uma regra para cada coluna
  2. 2
    ExemploCalcular uma receita por pedido
  3. 3
    Ideia-chaveInterpretar o denominador de uma média
  4. 4
    ExemploAdicionar uma coluna em uma sequência de métodos
  5. 5
    DesafioPosicionar uma Series recebida
  6. 6
    ExemploEscolher rótulos a partir de um limite
  7. 7
    ExplicaçãoDecidir o significado de valores não listados
  8. 8
    DesafioEscolher um método de recodificação parcial
  9. 9
    DicaPassar funções sem chamá-las
  10. 10
    ExemploLimitar valores sem remover registros
  11. 11
    DesafioAcompanhar uma coluna calculada e recodificada
  12. 12
    RecapitulaçãoVerificar a regra e suas entradas sem correspondência
6

Ordenar dados e interpretar seus resumos

18 passos
Acompanhar regras de ordenação e atribuição de postos, depois calcular e interpretar resumos numéricos e categóricos.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoEscolher a visão que responde à pergunta
  2. 2
    ExemploOrdenar pontos antes dos nomes
  3. 3
    DicaManter um empate completo no limite
  4. 4
    DesafioSeparar a ordem dos rótulos da ordem dos valores
  5. 5
    ExemploCalcular a média das posições ocupadas por empates
  6. 6
    ExplicaçãoEscolher lacunas ou grupos consecutivos
  7. 7
    DesafioInterpretar um posto percentílico
  8. 8
    ExemploConstruir um resumo meteorológico
  9. 9
    ExplicaçãoIgualar o denominador da dispersão
  10. 10
    ExemploInterpretar quartis e uma média assimétrica
  11. 11
    DesafioVerificar uma média junto com sua contagem
  12. 12
    ExemploContar categorias e proporções
  13. 13
    Ideia-chaveSeparar três perguntas sobre valores
  14. 14
    DesafioContar uma condição como fração
  15. 15
    ExplicaçãoDescrever associação com precisão
  16. 16
    DesafioLer uma matriz após verificar os dados
  17. 17
    DesafioEscolher e relatar um resumo
  18. 18
    RecapitulaçãoManter visível a regra de cada resumo

Questões de Series e DataFrames no pandas

50 Questões de Prática em 5 conjuntos

Conjunto 1: Ler e usar uma tabela do pandas10 Questões de Prática

Questão 1 de 10

s = pd.Series([8, 13, 5], index=[2, 0, 1]). O que s[0] retorna?
  1. 8
  2. 13
  3. 5
  4. 0
Mostrar respostaOcultar resposta
Resposta: B
A chave inteira 0 seleciona o rótulo de índice 0, cujo valor é 13. O primeiro valor exibido é 8, mas ele está na posição 0 e tem o rótulo 2. Para solicitar o primeiro valor por posição, use s.iloc[0]; chaves inteiras entre colchetes continuam sendo rótulos.

Questão 2 de 10

Uma coluna contém [4.0, NaN, 9.0] e representa contagens inteiras de itens. Qual tipo de dados pode manter a lacuna enquanto armazena as contagens conhecidas como inteiros?
  1. int
  2. "bool"
  3. "str"
  4. "Int64"
Mostrar respostaOcultar resposta
Resposta: D
Int64, com I maiúsculo e suporte a valores ausentes, armazena números inteiros e representa a entrada ausente como <NA>. O int64 comum não tem marcador de valor ausente e não consegue converter esse NaN. Texto preservaria uma exibição das entradas, mas não armazenaria contagens numéricas inteiras.

Questão 3 de 10

Uma tabela tem rótulos de linha únicos [30, 10, 20]. Qual linha df.loc[10] seleciona?
  1. A linha com rótulo 10, agora a segunda.
  2. A primeira linha, na posição zero.
  3. A última linha, na posição dois.
  4. A décima linha, se ela existir.
Mostrar respostaOcultar resposta
Resposta: A
loc interpreta 10 como um rótulo de índice, então seleciona a segunda linha exibida. Ele não conta dez posições para a frente. A localização da linha pode mudar após a ordenação, mas seu rótulo permanece o mesmo até que o índice seja alterado explicitamente.

Questão 4 de 10

df tem valores de categoria ["A", "B", "A", "B"] e massas [3, 7, 9, 4]. Quais rótulos atendem a (df["category"] == "A") | (df["mass_kg"] > 6) com o índice padrão?
  1. Apenas o rótulo 2.
  2. Apenas os rótulos 0 e 2.
  3. Os rótulos 0, 1 e 2.
  4. Apenas os rótulos 1 e 2.
Mostrar respostaOcultar resposta
Resposta: C
A máscara com ou mantém linhas que atendem a qualquer uma das condições. As linhas 0 e 2 são da categoria A, e as linhas 1 e 2 excedem 6 kg, então sua união é 0, 1 e 2. Manter apenas o rótulo 2 exigiria ambas as condições e usaria & em vez de |.

Questão 5 de 10

As quantidades são [2.0, 5.0, NaN] e os preços unitários são [7.0, 3.0, 9.0]. Qual é a média padrão de seus produtos linha por linha?
  1. Aproximadamente 9.67
  2. 14.5
  3. 29.0
  4. NaN
Mostrar respostaOcultar resposta
Resposta: B
Os produtos são 14, 15 e NaN. A média padrão ignora o resultado ausente, então 29 é dividido por dois, produzindo 14,5. Dividir pelas três linhas produz aproximadamente 9,67 e trataria uma receita desconhecida como se sua contribuição fosse um zero registrado.

Questão 6 de 10

Uma coluna numérica contém [5.0, NaN, 2.0]. Em uma ordenação decrescente padrão por valores, onde NaN aparece?
  1. Antes dos dois valores numéricos.
  2. Entre os dois valores numéricos.
  3. Depois dos dois valores numéricos.
  4. Na mesma posição de antes.
Mostrar respostaOcultar resposta
Resposta: C
Valores ausentes vão para o fim por padrão mesmo quando os valores são ordenados em ordem decrescente. A ordem é 5, 2 e depois NaN. Inverter ascending altera a ordem numérica, mas não move lacunas para o início; isso exige na_position="first".

Questão 7 de 10

a = pd.Series([6, 9], index=["east", "west"]) e b = pd.Series([4, 7], index=["west", "east"]). Quais são (a + b).loc["east"] e (a + b).loc["west"]?
  1. 13 e 13
  2. 10 e 16
  3. 6 e 9
  4. 7 e 4
Mostrar respostaOcultar resposta
Resposta: A
A aritmética de Series associa rótulos de índice. East combina 6 com 7 e west combina 9 com 4, então ambas as somas são 13. Parear as primeiras entradas exibidas produziria 10 e 16, mas essas entradas pertencem a rótulos diferentes e não são pareadas pelo pandas.

Questão 8 de 10

Duas linhas têm células ausentes: uma tem lacunas em três colunas e a outra em uma coluna. O que df.isna().any(axis=1).sum() retorna?
  1. 4
  2. 3
  3. 1
  4. 2
Mostrar respostaOcultar resposta
Resposta: D
any(axis=1) reduz cada linha a uma resposta: se ela contém pelo menos uma lacuna. Ambas as linhas afetadas são True, então a soma é 2. Somar as contagens de valores ausentes em todas as colunas produziria quatro células, mas essa expressão conta cada linha apenas uma vez.

Questão 9 de 10

Os nomes são ["Zoe", "Ari", "Bo", "Dee"] com pontuações [8, 8, 10, 8]. Após ordenar por pontuação decrescente e nome crescente, e selecionar as duas primeiras linhas, quais nomes aparecem em ordem?
  1. Bo, Zoe.
  2. Bo, Ari.
  3. Ari, Bo.
  4. Ari, Dee.
Mostrar respostaOcultar resposta
Resposta: B
A pontuação 10 coloca Bo em primeiro lugar. As três pontuações 8 são então ordenadas por nome, com Ari antes de Dee e Zoe, então a segunda linha selecionada é Ari. Manter Zoe em segundo preservaria a ordem de entrada dentro do empate em vez de aplicar a chave secundária informada.

Questão 10 de 10

s contém ["A", "B", "C", "A", "B"]. Após s.replace({"C": "B"}), quais são a moda e sua frequência relativa?
  1. B e 0,6.
  2. A e 0,4.
  3. B e 0,5.
  4. A e 0,6.
Mostrar respostaOcultar resposta
Resposta: A
Substituir C por B produz as contagens A 2 e B 3, então B é a moda. Sua frequência relativa é três de cinco, ou 0,6. O denominador permanece cinco porque replace mantém todas as observações; a transformação não remove a linha original de C.
Conjunto 2: Escolher a operação adequada do pandas10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um DataFrame tem 7 linhas e 4 colunas. Qual é seu .size?
  1. 7
  2. 4
  3. 28
  4. 11
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma tabela de 11 linhas tem uma coluna com 8 valores não nulos. Quantos valores estão ausentes nessa coluna?
  1. 3
  2. 8
  3. 11
  4. 19
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

df tem cinco linhas. Quais posições de linha são selecionadas por df.iloc[1:4]?
  1. Posições 1, 2, 3 e 4.
  2. Posições 1, 2 e 3.
  3. Posições 0, 1 e 2.
  4. Posições 2, 3 e 4.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

No pandas 3, chosen = df[df["active"]] é seguido por chosen["score"] = 0. O que acontece com df?
  1. Todas as suas pontuações se tornam zero.
  2. Apenas as pontuações ativas se tornam zero.
  3. Apenas as pontuações inativas se tornam zero.
  4. Seus valores de pontuação permanecem inalterados.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Para os valores [4, 6, 9], quais rótulos resultam de np.where(s >= 6, "large", "small")?
  1. ["small", "small", "large"]
  2. ["small", "large", "large"]
  3. ["large", "small", "small"]
  4. ["large", "large", "small"]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

As pontuações [90, 70, 90, 50] recebem postos com method="min", ascending=False. Quais são os postos resultantes na ordem original das linhas?
  1. [1, 3, 1, 4]
  2. [1, 2, 1, 3]
  3. [1.5, 3, 1.5, 4]
  4. [2, 3, 2, 4]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um arquivo separado por ponto e vírgula contém code;mass_kg, depois 007;1,5 e 012;2,0. Qual carregamento preserva os códigos e permite calcular uma média numérica das massas?
  1. pd.read_csv("loads.csv", sep=";", decimal=".", dtype={"code": str})
  2. pd.read_csv("loads.csv", sep=";", decimal=",", dtype={"code": int})
  3. pd.read_csv("loads.csv", sep=";", decimal=",", dtype={"code": str})
  4. pd.read_csv("loads.csv", sep=",", decimal=",", dtype={"code": str})
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

df tem índice [10, 20, 30] e receita [12.0, 24.0, 36.0]. Uma nova coluna recebe df.loc[df["revenue"] > 15, "revenue"] / 2. Qual é a soma padrão da nova coluna?
  1. 36.0
  2. 18.0
  3. NaN
  4. 30.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Os valores [12, 4, 12, 8] recebem postos em ordem crescente com o método padrão e pct=True. Qual posto percentílico corresponde a cada 12?
  1. 1.0
  2. 0.75
  3. 0.875
  4. 0.5
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

df.index é ["a", "b", "a"]. Qual é o tipo de df.loc["a"]?
  1. Um DataFrame contendo duas linhas.
  2. Uma Series somente com a primeira linha.
  3. Uma Series contendo a última linha.
  4. Um escalar que conta as linhas correspondentes.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Verificar linhas, tipos e cálculos10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

df tem um índice sem nome [40, 60]. O que df.reset_index() faz com esses rótulos?
  1. Descarta-os e mantém todas as outras colunas.
  2. Mantém-nos como os novos rótulos de linha.
  3. Usa-os para renomear a primeira coluna.
  4. Mantém-nos em uma coluna index.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um arquivo não tem cabeçalho e começa com 501,Sensor. Como ele deve ser carregado com as colunas id e device sem perder esse primeiro registro?
  1. pd.read_csv("devices.csv", header=0, names=["id", "device"])
  2. pd.read_csv("devices.csv", header=None, names=["id", "device"])
  3. pd.read_csv("devices.csv", skiprows=1, names=["id", "device"])
  4. pd.read_csv("devices.csv", index_col=0, names=["id", "device"])
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Em um índice ordenado [11, 12, 13, 14], qual é a forma de df.loc[12:14, ["mass_kg"]]?
  1. (3, 1)
  2. (2, 1)
  3. (1, 3)
  4. (3,)
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

cutoff = 6. Como query pode selecionar linhas cujo mass_kg excede essa variável Python?
  1. df.query("mass_kg > cutoff")
  2. df.query("@mass_kg > cutoff")
  3. df.query("mass_kg > @cutoff")
  4. df.query("mass_kg > 6@")
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

O que acontece com 14 em pd.Series([-2, 6, 14]).clip(lower=0, upper=10)?
  1. Ele se torna 10.
  2. Ele é removido.
  3. Ele se torna 0.
  4. Ele permanece 14.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma Series de texto é ["L", "M", "L", None]. Qual proporção o value_counts(normalize=True) padrão atribui a L?
  1. 0.5
  2. 0.75
  3. 2.0
  4. Aproximadamente 0.667
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

a = pd.Series([5, 8], index=["u", "v"]) e b = pd.Series([2, 4], index=["v", "w"]). Seja c = a.add(b, fill_value=0). Quanto é c[c > 4].sum()?
  1. 10.0
  2. 15.0
  3. 19.0
  4. 9.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma importação de seis linhas tem seis identificadores distintos não ausentes e quatro medições de temperatura presentes que totalizam 28 °C. Um relatório diz que um identificador se repete e que a média é aproximadamente 4,67 °C. Qual relatório corrigido corresponde aos dados?
  1. Um identificador se repete; faltam duas medições; média de 7 °C.
  2. Identificadores são únicos; nenhuma medição falta; média de 4,67 °C.
  3. Identificadores são únicos; faltam duas medições; média de 7 °C.
  4. Um identificador se repete; nenhuma medição falta; média de 4,67 °C.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

df tem índice [4, 8, 12] e preços de ponto flutuante [10.0, 20.0, 30.0]. Uma máscara seleciona os rótulos 4 e 12. Após df.loc[mask, "price"] = pd.Series([7.0, 9.0], index=[12, 4]), quais são os preços na ordem original das linhas?
  1. [7.0, 20.0, 9.0]
  2. [9.0, 20.0, 7.0]
  3. [9.0, NaN, 7.0]
  4. [NaN, 20.0, NaN]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

As pontuações são [11, 9, 9, 6]. Qual é o número de linhas e a menor pontuação retornada por df.nlargest(2, "score", keep="all")?
  1. 2 linhas; menor pontuação 9.
  2. 4 linhas; menor pontuação 6.
  3. 1 linha; menor pontuação 11.
  4. 3 linhas; menor pontuação 9.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Acompanhar várias operações em conjunto10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

df = pd.DataFrame({"a": [2, 5], "b": [7, 1]}). Quais valores df.sum(axis=1) retorna na ordem das linhas?
  1. [9, 6]
  2. [7, 8]
  3. [3, 12]
  4. [2, 5, 7, 1]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

s = pd.Series(["8", "bad", "2.5"]). Quais são os valores após pd.to_numeric(s, errors="coerce")?
  1. [8.0, 0.0, 2.5]
  2. [8, "bad", 2.5]
  3. [8.0, NaN, 2.5]
  4. [8, NaN, 2]
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma tabela tem índice [7, 2, 9] e valores de x [4, 12, 8]. Seja d = df.sort_values("x", ascending=False). Quanto é d.iloc[:2]["x"].sum() - d.loc[7, "x"]?
  1. 20
  2. 8
  3. 24
  4. 16
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Para as massas [2, 5, 8], quais valores atendem a .between(2, 8, inclusive="neither")?
  1. Tanto 2 quanto 5.
  2. Apenas 5.
  3. Tanto 5 quanto 8.
  4. Todos os três valores.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

df tem índice [5, 9, 12], quantidade [2, 3, 4] e preço [6, 5, 2]. Ele atribui a receita, mantém receitas acima de 10 e depois atribui pd.Series([20.0], index=[9]) como adjusted. Qual é a média padrão do valor ajustado?
  1. 10.0
  2. 13.5
  3. 20.0
  4. NaN
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

As medições são [3.0, 7.0, NaN, 8.0]. Quais são sua média e contagem padrão?
  1. 4.5 e 4
  2. 6.0 e 3
  3. 6.0 e 4
  4. 4.5 e 3
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

df = pd.DataFrame({"a": [2, 6], "b": [5, 3]}, index=[8, 4]). Após df = df.T, quais são df.shape e df.loc["b"].sum()?
  1. (2, 2) e 8
  2. (2, 2) e 9
  3. (2, 2) e 7
  4. (4, 1) e 8
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Uma Series contém "1,500", "800", "unknown", "200", sem lacunas existentes. Após remover as vírgulas, fazer a coerção numérica e calcular a média padrão, quais são a média e o número de novas lacunas?
  1. 625.0; uma nova lacuna.
  2. Aproximadamente 833.33; nenhuma nova lacuna.
  3. 625.0; nenhuma nova lacuna.
  4. Aproximadamente 833.33; uma nova lacuna.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma Series float64 contém [2.0, NaN, 8.0, 5.0]. Qual é a soma dos valores selecionados por s.notna() & (s != 5) & (s < 8)?
  1. 10.0
  2. 7.0
  3. 2.0
  4. NaN
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

As medições são [1, 2, 3, 4, 40] mm. A média é 10 mm e a mediana é 3 mm. Por que a mediana descreve melhor uma medição típica aqui?
  1. A mediana soma as cinco medições antes de dividir.
  2. A média atribui um peso diferente a cada medição.
  3. A mediana sempre é igual à menor medição.
  4. A medição alta de 40 mm eleva a média.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Resolver problemas de alinhamento e resumo10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Uma tabela indexada pelos identificadores únicos 81 e 82 é salva como df. A linha seguinte é df.reset_index(). Por que df.loc[0] ainda falha?
  1. A redefinição manteve 81 como primeiro rótulo.
  2. O novo índice começa na posição 1.
  3. A tabela retornada não foi atribuída.
  4. A coluna de identificadores impede consultas por rótulo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um arquivo usa pontos e vírgulas entre campos e pontos decimais nos números. Qual opção altera o separador de campos?
  1. decimal=";"
  2. sep=";"
  3. header=";"
  4. index_col=";"
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma tabela de quatro linhas tem os rótulos [8, 3, 6, 1]. Quais rótulos permanecem em df.iloc[-2:][["x"]]?
  1. 8 e 3.
  2. 3 e 6.
  3. 1 e 6.
  4. 6 e 1.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

df tem índice ["k", "m", "p"], a [4, 8, 12] e b [3, 1, 5]. Seja d = df.loc[(df["a"] >= 8) & (df["b"] < 4), ["a", "b"]]. Quanto é d.sum(axis=1).iloc[0]?
  1. 9
  2. 7
  3. 17
  4. 24
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Os nomes dos dispositivos são ["Probe A", "sensor", None, "PROBE B"]. Quais rótulos de linha padrão atendem a .str.contains("probe", case=False, na=False)?
  1. 0 e 3.
  2. Apenas o rótulo 0.
  3. 0, 2 e 3.
  4. Apenas o rótulo 3.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

df tem rótulos padrão e preços de ponto flutuante [8.0, 12.0, 18.0]. mask = df["price"] >= 12, depois df.loc[mask, "price"] = pd.Series([9.0], index=[2]). O que df["price"].count() retorna?
  1. 3
  2. 2
  3. 1
  4. 0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Uma tabela tem o índice padrão e as pontuações [60, 90, 90, 75] na ordem das linhas. Um posto denso decrescente é atribuído como place, e a tabela é ordenada por place em ordem crescente com uma ordenação estável. Quais rótulos originais de linha aparecem primeiro?
  1. 0 e 3.
  2. 2 e 1.
  3. 1 e 3.
  4. 1 e 2.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

s = pd.Series(["X", "Y", "X", "Z"]). Após t = s.map({"X": 4, "Y": 10}), quais são t.count() e t.mean()?
  1. 4 e 4.5
  2. 3 e 4.5
  3. 3 e 6.0
  4. 4 e 6.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Uma Series s do pandas contém [2.0, 4.0, 6.0]. Quais são s.std() e np.std(s.to_numpy()), arredondados para três casas decimais?
  1. 1.633 e 2.000
  2. 4.000 e 2.667
  3. 2.000 e 2.000
  4. 2.000 e 1.633
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

df tem x [1, 2, 3, 4], y [100, 6, 4, 2] e z [5, 5, 5, 5]. Após df.loc[df["x"] > 1, ["x", "y", "z"]].corr(), quais valores aparecem para x com y e z consigo mesmo?
  1. 1.0 e NaN
  2. -1.0 e 1.0
  3. -1.0 e NaN
  4. -1.0 e 0.0
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

91 Termos-Chave, cada um com sua definição

A

Acessor de data e hora dt
O acessor de data e hora dt fornece componentes ou métodos de data e hora para uma Series cujos valores são desse tipo.
Após a conversão de datas, .dt.day_name() retorna o dia da semana associado a cada data de pedido.
Acessor de texto str
O acessor de texto str fornece métodos vetorizados de strings em uma Series de texto, incluindo conversão para maiúsculas e contagem de caracteres.
orders["product"].str.len() calcula um comprimento de nome para cada produto registrado.
Agregação
Uma agregação reduz uma coleção de valores a resultados resumidos, e agg permite solicitar várias estatísticas em conjunto.
agg(["mean", "max"]) apresenta dois resumos diferentes para cada coluna numérica selecionada.
Alinhamento por rótulos
Alinhamento por rótulos é a associação de valores do pandas pelos rótulos de índice durante operações, mesmo quando suas posições diferem.
Somar Series indexadas em ordens diferentes de cidades ainda combina cada cidade com ela mesma.
Amostra aleatória
Uma amostra aleatória é uma seleção feita por um procedimento aleatório; um random_state fixo torna a escolha reproduzível nos mesmos dados.
sample(3, random_state=0) é útil para verificar linhas além do início ou do fim de uma tabela.
Aplicação de função por linha com apply
A aplicação de função por linha com apply passa cada linha de um DataFrame a uma função com axis=1, permitindo que ela leia várias colunas.
Uma função personalizada por linha pode usar quantidade e preço, embora a multiplicação de colunas seja mais rápida para calcular receita.
Associação
Uma associação é uma relação observada entre variáveis; uma correlação a descreve sem estabelecer um mecanismo causal.
Uma correlação semanal entre temperatura e chuva não mostra que alterar a temperatura causaria uma mudança na precipitação.
Atribuição de escalar
A atribuição de escalar preenche todas as células selecionadas com um único valor fornecido, sem precisar de um valor separado para cada linha.
Atribuir zero a uma seleção loc dá a cada célula selecionada o valor zero e deixa outras linhas inalteradas.
Atribuição encadeada
Atribuição encadeada tenta atualizar valores por meio de seleções sucessivas e nunca altera a tabela original no pandas 3.
Uma tabela filtrada seguida de outra seleção de coluna não pode servir para atualizar sua origem.
Atualização condicional
Uma atualização condicional atribui novos valores a células em linhas selecionadas por uma condição, normalmente por meio de uma única atribuição loc.
df.loc[mask, "price"] *= 0.9 dá desconto exatamente às linhas selecionadas pela máscara de atualização de preços.

C

Cabeçalho
Um cabeçalho é a linha que contém os nomes das colunas de uma tabela, que o pandas normalmente lê da primeira linha de um CSV.
Use header=None quando a primeira linha contiver um registro real que deve permanecer nos dados.
Chave de ordenação
Uma chave de ordenação é a coluna ou o rótulo cujos valores controlam a ordem; quando várias chaves são fornecidas, as anteriores têm prioridade.
Pontos podem ser a chave principal de ordenação, com nomes ordenando registros que compartilham a mesma pontuação.
Coerção de tipo
A coerção numérica converte valores numéricos interpretáveis e substitui entradas inválidas por valores ausentes em vez de parar.
Converter "7", "unknown", "2.5" com errors definido como coerce cria uma nova entrada ausente.
Coluna
Uma coluna é uma sequência com rótulo que representa uma variável em um DataFrame, armazenada como uma Series com seu próprio tipo de dados.
A coluna de quantidade contém uma contagem ou entrada ausente para cada pedido da tabela.
Coluna derivada
Uma coluna derivada armazena valores calculados a partir de dados existentes, como uma operação aritmética linha por linha entre duas colunas numéricas.
Multiplicar quantity por unit_price cria revenue, mantendo cada resultado com seu pedido.
Conjunção lógica elemento a elemento
A conjunção lógica elemento a elemento combina máscaras com &, tornando uma linha True apenas quando ambas as condições correspondentes são True.
Um pedido de Home que custa mais de 10 deve satisfazer as comparações de categoria e de preço.
Contagem de ocorrências por valor
A contagem de ocorrências por valor informa quantas vezes cada valor distinto ocorre, geralmente em ordem da maior para a menor frequência.
As contagens por valor de categoria mostram se a maioria dos pedidos registrados é Stationery, Home ou Bags.
Contagem de valores distintos
Uma contagem de valores distintos é o número de valores presentes diferentes em uma coluna, retornado por nunique com suas configurações padrão.
Seis identificadores registrados distintos entre seis linhas indicam que a coluna de identificadores não tem valores repetidos.
Contagem de valores não nulos
Uma contagem de valores não nulos é o número de entradas presentes em uma coluna, que pode ser comparado com a contagem de linhas para localizar lacunas.
Cinco quantidades não nulas entre seis pedidos significam que um pedido não tem quantidade registrada.
Conversão de tipo
A conversão de tipo transforma valores em um tipo de dados escolhido para que a coluna permita as operações exigidas por seu significado.
Converta texto de datas antes de solicitar .dt.month, depois atribua a Series convertida de volta.
Cópia na escrita
A cópia na escrita é o comportamento do pandas 3 segundo o qual uma Series ou um DataFrame derivado age de forma independente quando seus valores mudam.
Editar uma seleção salva de pedidos Home de uma tabela de pedidos altera essa seleção enquanto deixa a tabela de pedidos intacta.
Correlação de Pearson
A correlação de Pearson mede a direção e a intensidade de uma associação linear entre variáveis numéricas em uma escala de −1 a 1.
Um coeficiente negativo entre temperatura e chuva descreve uma tendência de dias mais quentes terem menos chuva.
Correlação de Spearman
A correlação de Spearman mede a associação por meio de postos, sendo adequada a relações que aumentam ou diminuem consistentemente.
Uma relação curva que aumenta de forma constante pode ser descrita por postos sem pressupor uma linha reta.
Correspondência de texto
Uma correspondência de texto testa um padrão de string em cada entrada de texto, como na busca dentro de valores com str.contains.
Procurar "note" com case=False encontra Notebook mesmo que seu N seja maiúsculo.

D

DataFrame
Um DataFrame é uma tabela bidimensional do pandas cujas colunas compartilham um índice de linhas e podem ter, cada uma, um tipo de dados diferente.
Uma tabela de pedidos armazena texto de produto, quantidades numéricas e preços em colunas separadas.
Delimitador
Um delimitador é o caractere que separa campos em um registro de texto, especificado com sep quando o pandas lê um arquivo CSV.
Um arquivo delimitado por ponto e vírgula precisa de sep=";" mesmo que números dentro de seus campos usem vírgulas decimais.
Desvio padrão
O desvio padrão mede a dispersão em torno da média nas unidades originais; o pandas usa o denominador amostral por padrão.
O desvio padrão da temperatura é medido em graus Celsius, diferentemente da variância, medida em graus quadrados.
Difusão de um escalar
A difusão de um escalar aplica um valor fornecido em toda uma operação de coluna ou preenche uma coluna selecionada com esse valor.
Dividir cada receita pelo mesmo total conhecido fornece a participação de cada pedido nesse total.
Diretório de trabalho
O diretório de trabalho é a pasta a partir da qual o Python resolve caminhos relativos ao abrir arquivos como um CSV.
Um nome de arquivo válido ainda pode gerar FileNotFoundError se o Python estiver em execução em outra pasta.
Disjunção lógica elemento a elemento
A disjunção lógica elemento a elemento combina máscaras com |, tornando uma linha True quando qualquer uma das condições correspondentes, ou ambas, é True.
Uma seleção de itens de Home ou preços acima de 10 pode incluir itens caros de outra categoria.

E

Eixo
Um eixo é uma direção em uma tabela do pandas: o eixo 0 percorre as linhas, e o eixo 1 percorre as colunas para reduções por linha.
df.sum(axis=1) soma as colunas numéricas selecionadas dentro de cada linha, fornecendo um total por linha.
Erro de ponto flutuante
Um erro de ponto flutuante é uma pequena diferença causada pela representação e pelo cálculo de valores decimais em armazenamento binário.
Um cálculo de imposto pode mostrar 1.9000000000000001, que pode ser arredondado para duas casas decimais.
Escalar
Um escalar é um único valor retornado quando uma seleção identifica uma célula, em vez de uma Series ou DataFrame.
Selecionar um rótulo único de linha e um nome de coluna retorna um nome de produto como escalar.

F

Fatia por posições
Uma fatia por posições seleciona um intervalo a partir de uma posição inicial incluída até a posição final informada, sem incluí-la.
.iloc[1:3] retorna as posições 1 e 2 e pode diferir de uma fatia loc com extremos inclusos.
Fatia por rótulos
Uma fatia por rótulos seleciona um intervalo usando rótulos inicial e final e inclui ambos os extremos em um índice ordenado adequado.
Em um índice de rótulos de pedido, .loc[1002:1004] inclui os três rótulos de pedido 1002, 1003 e 1004.
Filtragem
Filtragem mantém observações que satisfazem uma condição de linha, preservando seus valores e rótulos de índice existentes.
Após manter pedidos de Stationery, os rótulos originais podem ter lacunas em vez de recomeçar em zero.
Forma
A forma de um DataFrame é uma tupla de dois itens que fornece primeiro seu número de linhas e depois seu número de colunas.
Uma tabela com seis pedidos e quatro variáveis registradas tem forma (6, 4) e 24 células.
Formato de valores separados por vírgulas
CSV é um formato de texto para registros tabulares cujos campos são separados por um delimitador, geralmente vírgulas, e que frequentemente tem um cabeçalho.
Um campo em branco entre dois delimitadores pode representar uma quantidade não registrada em um pedido.
Frequência relativa
Uma frequência relativa é a contagem de um valor dividida pela contagem de todas as entradas incluídas, expressando uma proporção.
Três entradas Stationery entre seis categorias presentes produzem 0,5, ou 50% após multiplicar por 100.

Í

Índice
Um índice é a coleção de rótulos associada a uma Series ou às linhas de um DataFrame, usada para identificar entradas.
Um índice de cidades permite que population["Lima"] solicite o valor de uma cidade sem conhecer sua posição.
Índice de sequência de inteiros
Um RangeIndex é uma sequência de rótulos inteiros de linhas fornecida por padrão, normalmente começando em zero e aumentando de um em um.
Após a filtragem, reset_index(drop=True) substitui os rótulos mantidos por um novo índice padrão.

I

Indexador at
O indexador at seleciona uma única célula por seus rótulos de linha e coluna, fornecendo uma forma concisa de consulta escalar por rótulos.
orders.at[2, "product"] lê o produto no rótulo 2 em uma tabela de pedidos com índice padrão.
Indexador iat
O indexador iat seleciona uma única célula por suas posições de linha e coluna começando em zero, sem interpretá-las como rótulos.
orders.iat[2, 2] lê a célula na terceira linha e terceira coluna de uma tabela de pedidos.
Indexador iloc
O indexador iloc seleciona linhas e colunas por posições inteiras começando em zero, independentemente de seus rótulos ou nomes.
.iloc[-1] retorna a última linha mesmo que seu rótulo de índice seja um número de pedido como 1006.
Indexador loc
O indexador loc seleciona linhas e colunas por rótulos, aceitando rótulos individuais, listas, fatias por rótulos e máscaras booleanas.
Um índice de identificadores de pedidos permite que .loc[1004, "product"] selecione o produto de um pedido identificado.
Inferência de tipo
Inferência de tipo é a escolha, pelo pandas, do tipo de dados de uma coluna a partir de seus valores de entrada quando nenhum tipo explícito é fornecido.
A inferência numérica pode transformar o identificador "001" em 1, a menos que seu tipo de dados seja especificado como texto.

L

Limitação de valores
A limitação de valores restringe valores a limites inferiores ou superiores informados, mantendo cada observação em vez de remover linhas fora do intervalo.
Limitar preços unitários em 20 altera um valor de 35 para 20, mantendo o mesmo registro de pedido.

M

Mapeamento por dicionário
O mapeamento por dicionário traduz cada entrada por meio de uma consulta de chave para valor e, com map, torna ausente uma entrada não listada.
Mapear cada categoria para um código exige uma chave para cada categoria cujo código deva permanecer conhecido.
Marcador de valor ausente
Um marcador de valor ausente é um símbolo ou valor armazenado usado para indicar que uma entrada está ausente, em vez de ser conhecida.
na_values=["-"] informa ao leitor de CSV que um hífen no arquivo representa uma entrada ausente.
Máscara booleana
Uma máscara booleana é uma sequência de valores lógicos que indica quais entradas satisfazem uma condição e devem ser selecionadas.
Comparar cada preço com 10 cria um True ou False para cada linha de pedido.
Matriz de correlação
Uma matriz de correlação registra correlações entre pares e é simétrica, com correlações de uma coluna consigo mesma iguais a 1 para colunas numéricas que variam.
A entrada de chuva com temperatura é igual à de temperatura com chuva; uma coluna constante produz NaN.
Média aritmética
A média aritmética é o total dos valores numéricos registrados dividido por sua contagem, com o pandas ignorando valores ausentes por padrão.
Uma média de quantidade baseada em cinco contagens registradas não deve ser dividida pelas seis linhas de pedidos.
Mediana
A mediana é o valor central de dados numéricos ordenados, calculando-se a média dos dois valores centrais quando a contagem registrada é par.
Um dia muito chuvoso pode elevar a média semanal de chuva acima da mediana, que permanece próxima de um dia seco típico.
Método assign
O método assign retorna um DataFrame contendo colunas novas ou substituídas e deixa sua tabela de entrada inalterada.
Uma lambda em assign pode calcular uma coluna de imposto a partir da receita naquele estágio de uma sequência de métodos.
Método between
O método between testa se cada valor está entre um limite inferior e um superior, incluindo ambos os extremos por padrão.
between(5, 20, inclusive="left") inclui 5, mas exclui 20 do intervalo de preços.
Método isin
O método isin cria uma máscara de pertencimento, testando se cada valor ocorre em uma coleção fornecida de valores permitidos.
O pertencimento da categoria a ["Home", "Bags"] substitui duas comparações de igualdade unidas por ou.
Método isna
O método isna identifica entradas ausentes, produzindo True para lacunas e False para valores presentes em cada posição.
Uma máscara isna pode selecionar o pedido sem quantidade sem comparar nada com NaN.
Método query
O método query filtra um DataFrame usando uma expressão em string na qual nomes de colunas se referem diretamente a seus valores.
query("quantity >= 2 and unit_price < 5") pode expressar claramente um filtro combinado de pedidos.
Método rename
O método rename retorna um objeto com rótulos especificados alterados segundo um mapeamento, mantendo os demais rótulos.
rename(columns={"unit_price": "price"}) altera o nome de uma coluna sem alterar seus valores.
Método reset_index
O método reset_index retorna uma tabela com um novo índice de linhas padrão e, a menos que seja descartado, o índice antigo mantido como coluna.
Um índice nomeado de identificadores de pedidos se torna novamente uma coluna order_id após reset_index() sem outras opções.
Método set_index
O método set_index retorna uma tabela com uma coluna escolhida usada como rótulos de linha, removendo essa coluna por padrão.
orders.set_index("order_id") transforma um número de pedido no rótulo usado para consultas posteriores de linhas.
Moda
Uma moda é um valor que tem a maior frequência em um conjunto de dados; o pandas retorna uma Series porque várias modas podem empatar.
Se A e B aparecem três vezes e nenhum valor aparece mais frequentemente, mode retorna ambos os rótulos.

O

Observação
Uma observação é o caso individual registrado em uma linha de uma tabela organizada, com suas variáveis registradas em colunas.
Uma linha registra um pedido, mesmo quando seu produto também ocorre na linha de outro pedido.
Operação vetorizada
Uma operação vetorizada aplica uma expressão a uma sequência ou coluna inteira de valores sem um laço Python explícito sobre as linhas.
Multiplicar uma Series de preços por 0,9 reduz cada preço registrado na mesma proporção.
Ordem crescente
A ordem crescente coloca valores menores antes dos maiores, sendo a direção padrão da ordenação por valores e por índice no pandas.
Defina ascending=False quando uma tabela de resultados deve exibir as maiores pontuações primeiro.
Ordenação estável
Uma ordenação estável preserva a ordem relativa original de entradas empatadas no valor de ordenação, quando solicitada para uma coluna.
kind="stable" mantém duas pontuações iguais em sua ordem anterior em vez de impor uma nova regra de desempate.

P

Posição negativa
Uma posição negativa conta de trás para a frente a partir do fim de um eixo, com −1 identificando sua última entrada disponível.
A posição −2 seleciona a penúltima coluna independentemente do nome dessa coluna.
Posicionamento de valores ausentes
O posicionamento de valores ausentes especifica onde as lacunas aparecem em um resultado ordenado, independentemente da direção da ordenação numérica.
Uma ordenação decrescente ainda coloca NaN por último, a menos que na_position="first" seja solicitado explicitamente.
Posto
Um posto é um número que descreve a posição de um valor em dados ordenados, associado à linha original sem reordená-la.
Postos decrescentes permitem que o registro original de cada pessoa contenha uma posição baseada em sua pontuação.
Posto denso
Um posto denso atribui postos consecutivos a grupos de valores distintos, de modo que empates não deixam lacunas antes do próximo grupo.
Dois vencedores empatados recebem o posto 1 e a próxima pontuação distinta recebe o posto 2 com o método dense.
Posto médio
Um posto médio atribui a cada valor empatado a média das posições ocupadas por seu grupo empatado na ordem classificada.
Duas maiores pontuações iguais que ocupam as posições 1 e 2 recebem ambas o posto decrescente 1,5.
Posto mínimo
Um posto mínimo atribui aos valores empatados o menor posto ocupado e deixa lacunas para as outras posições ocupadas pelo empate.
Com dois valores em primeiro lugar, o próximo valor distinto recebe o posto 3 usando o método min.
Posto percentílico
Um posto percentílico expressa um posto como fração; o método padrão da média divide pelo número de valores classificados.
Um posto médio de 4,5 entre cinco valores não ausentes produz um posto percentílico de 0,9.
Posto por ordem de ocorrência
Um posto por ordem de ocorrência resolve empates pela ordem na entrada, atribuindo a cada entrada empatada um posto separado com o método first.
Reordenar linhas empatadas pode alterar seus postos pelo método first mesmo que suas pontuações permaneçam inalteradas.
Prévia dos dados
Uma prévia dos dados é uma pequena seleção exibida de registros usada para verificar valores e estrutura visíveis antes de analisar a tabela inteira.
head(3) permite verificar o cabeçalho e os três primeiros registros sem exibir todas as linhas.

Q

Quantil
Um quantil marca uma posição em dados ordenados para uma fração de zero a um, com o pandas interpolando por padrão.
quantile(0.25) pode fornecer um quartil inferior entre duas temperaturas medidas em uma coluna de temperatura.

R

Redução booleana
Uma redução booleana combina muitos valores lógicos em um resultado, como verificar se alguma ou todas as entradas são True.
O .any() de uma máscara pode responder se pelo menos um pedido tem quantidade ausente.

S

Seleção condicional
A seleção condicional com np.where escolhe uma saída para entradas True e outra para entradas False de uma condição.
Um limite de preço pode produzir os rótulos high e low sem escrever um laço Python sobre as linhas.
Seleção dos n maiores valores
Uma seleção dos n maiores valores obtém linhas com os maiores valores e pode incluir todos os empates no limite quando keep é definido como all.
nlargest(1, "points", keep="all") retorna duas linhas se duas pessoas compartilharem a maior pontuação.
Seletor de colunas
Um seletor de colunas identifica quais variáveis uma seleção de dois eixos deve retornar, usando rótulos em loc e posições em iloc.
Uma máscara pode escolher as linhas enquanto ["product", "unit_price"] escolhe as colunas a exibir.
Série do pandas
Uma Series é uma estrutura unidimensional do pandas que associa cada valor armazenado a um rótulo de índice e tem um único tipo de dados.
Uma Series de chuva pode associar medições em milímetros aos rótulos Mon, Tue e Wed.
Soma acumulada
Uma soma acumulada é um total progressivo com um valor acumulado em cada posição, retornado pelo método cumsum.
As somas acumuladas de chuva diária acompanham quanto choveu até cada dia da semana.
Substituição
A substituição altera valores especificados enquanto preserva os não listados, como ocorre em uma operação replace de Series.
Em uma coluna de categoria com Bags, Home e Stationery, substituir Bags por Luggage deixa os rótulos Home e Stationery inalterados.

T

Tipo de dados
Um tipo de dados é o tipo armazenado de uma Series ou coluna, que determina quais valores ela pode conter e quais operações permite.
Uma coluna de quantidade pode usar float64 quando um registro tem uma quantidade em branco lida como NaN.
Tipo de dados categórico
O tipo de dados categórico representa rótulos repetidos por meio de um conjunto de categorias e seus códigos, geralmente economizando memória em tabelas grandes.
Uma coluna categórica não ordenada rejeita min() mesmo quando seus rótulos exibidos são texto comum.
Tipo inteiro com suporte a valores ausentes
Um tipo inteiro com suporte a valores ausentes armazena números inteiros junto com entradas ausentes, representadas como no Int64 do pandas.
Uma coluna de contagens com um espaço em branco pode usar "Int64" em vez de falhar na conversão para int comum.

U

Unicidade do índice
A unicidade do índice significa que cada rótulo de linha aparece apenas uma vez, permitindo que um rótulo sirva como identificador de linha sem ambiguidade.
Verifique .index.is_unique antes de esperar que um identificador de pedido retorne exatamente uma linha.

V

Valor não numérico
NaN é um marcador de valor ausente usado em dados de ponto flutuante e em dados de texto padrão do pandas 3; ele não é um zero numérico conhecido.
Uma quantidade em branco pode tornar ausente sua receita calculada, enquanto receitas conhecidas permanecem utilizáveis.
Variância
A variância mede o desvio quadrático médio em relação à média usando o denominador escolhido, com ddof=1 por padrão no pandas.
É necessário igualar ddof antes de comparar um cálculo de dispersão do pandas com as configurações padrão do NumPy.
Variável de consulta
Uma variável de consulta é um valor Python externo referenciado com o prefixo @ para distingui-lo dos nomes de colunas.
Com limit = 5, query("unit_price > @limit") compara preços com esse valor Python.
Verificação de registros duplicados
Uma verificação de registros duplicados marca linhas repetidas ou valores repetidos em colunas selecionadas, geralmente deixando a primeira ocorrência sem marca.
Em uma coluna de produto que lista Notebook mais de uma vez, duplicated(subset="product") marca entradas posteriores de Notebook mesmo quando todos os identificadores de pedido diferem.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar