Pandas: Núcleo do DataFrame

Última atualização: 2026-08-26

Um DataFrame é a estrutura de dados central do Pandas — uma tabela rotulada em 2D onde cada coluna é uma Serie com seu próprio dtype e nome. Pense em um DataFrame como uma planilha do Excel ou uma tabela SQL em código, mas mais poderoso: programável, extensível e com controle de versão. Esta seção leva você a fundo na estrutura essencial de um DataFrame.

⚠️ Observação: O código abaixo requer um ambiente Python local.

1. O que você aprenderá



2. Tabela de Produtos do E-Commerce de Charlie

(1) Ponto de Dor: Gerenciar Múltiplas Colunas Juntas

Charlie administra um site de e-commerce e precisa gerenciar dados de produtos: nome, categoria, preço, estoque e avaliação — 5 colunas de tipos diferentes. Apenas com Series, ele precisaria manter 5 objetos Series separados e garantir que seus índices permanecessem alinhados.

PYTHON
import pandas as pd

# 5 Series separadas — é preciso manter o índice alinhado manualmente
names = pd.Series(['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'])
categories = pd.Series(['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'])
prices = pd.Series([999.99, 699.99, 349.99, 449.99, 79.99])
stocks = pd.Series([50, 120, 80, 35, 200])
ratings = pd.Series([4.7, 4.5, 4.3, 4.6, 4.2])
# Qual preço corresponde a qual produto? Espero que o índice permaneça alinhado!
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(2) Solução: O DataFrame Vincula as Colunas Juntas

▶ Exemplo: Gerenciando Dados de Produtos com um DataFrame (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard'],
    'category': ['Electronics', 'Electronics', 'Electronics', 'Electronics', 'Accessories'],
    'price': [999.99, 699.99, 349.99, 449.99, 79.99],
    'stock': [50, 120, 80, 35, 200],
    'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})

print(df)
#        name     category    price  stock  rating
# 0    Laptop  Electronics   999.99     50     4.7
# 1     Phone  Electronics   699.99    120     4.5
# 2    Tablet  Electronics   349.99     80     4.3
# 3   Monitor  Electronics   449.99     35     4.6
# 4  Keyboard  Accessories    79.99    200     4.2

print(df['name'])     # uma Series
print(df.loc[0])      # primeira linha como uma Series
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

Todas as 5 colunas estão vinculadas em um único DataFrame, com nomes de colunas autodescritivos e alinhamento automático de linhas.

(3) Benefício: Um DataFrame é uma "Coleção de Colunas"

Um DataFrame não é um "ndarray 2D" — ele é um dicionário ordenado de Series. Cada coluna é uma Series independente com seu próprio dtype, mas todas as colunas compartilham o mesmo Índice de linhas.


3. A Estrutura Essencial de um DataFrame

(1) Diagrama da Estrutura Interna

100%
graph TB
    subgraph DataFrame
        direction TB
        COL["Índice de Colunas<br/>(nome, categoria, preço, estoque, avaliação)"]
        ROW["Índice de Linhas<br/>(0, 1, 2, 3, 4)"]
        S1["Série: nome<br/>dtype: object"]
        S2["Série: categoria<br/>dtype: object"]
        S3["Série: preço<br/>dtype: float64"]
        S4["Série: estoque<br/>dtype: int64"]
        S5["Série: avaliação<br/>dtype: float64"]
    end
    ROW --> S1
    ROW --> S2
    ROW --> S3
    ROW --> S4
    ROW --> S5
    COL --> S1
    COL --> S2
    COL --> S3
    COL --> S4
    COL --> S5
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instale — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
Conceito Descrição Analogia
Índice de Linha Rótulos de linha compartilhados por todas as colunas Números de linhas do Excel
Colunas Rótulo do nome para cada coluna Cabeçalhos de colunas do Excel
Série da Coluna Cada coluna como uma Série independente Uma única coluna do Excel
valores O ndarray 2D subjacente Matriz de dados bruta

(2) DataFrame vs ndarray 2D

Característica NumPy ndarray 2D Pandas DataFrame
Restrição de tipo dtype global único dtype independente por coluna
Rótulos de linha Nenhum (posições inteiras) Índice (customizável)
Rótulos de colunas Nenhum (posições inteiras) Colunas (nomes das colunas)
Seleção de coluna arr[:, 2] df['preco']
Seleção de linha arr[0, :] df.loc[0]
Tipos mistos Não suportado Suportado nativamente
Valores faltantes np.nan (apenas float) NaN / NaT / pd.NA
📌 Ponto-Chave: A propriedade values de um DataFrame retorna um ndarray 2D, mas quando você tem tipos mistos ele se torna dtype objeto — a performance cai significativamente. Para operações puramente numéricas, selecione primeiro as colunas numéricas e então chame .values.



4. Múltiplas Formas de Criar um DataFrame

(1) A partir de um Dicionário (Mais Comum)

▶ Exemplo: Criando um DataFrame a partir de um Dicionário (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

# Dict of lists: keys = column names, values = column data
df = pd.DataFrame({
    'product': ['Coffee', 'Tea', 'Juice', 'Water'],
    'price': [4.50, 3.80, 5.20, 1.50],
    'calories': [5, 2, 120, 0]
})
print(df)
#   product  price  calories
# 0  Coffee   4.50         5
# 1     Tea   3.80         2
# 2    Juice   5.20       120
# 3    Water   1.50         0

# Custom row index
df2 = pd.DataFrame({
    'product': ['Coffee', 'Tea', 'Juice'],
    'price': [4.50, 3.80, 5.20]
}, index=['A001', 'A002', 'A003'])
print(df2.index)  # Index(['A001', 'A002', 'A003'])
TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(2) A partir de uma Lista de Listas

▶ Exemplo: Criando um DataFrame a partir de uma Lista de Listas (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

# List of lists: each inner list = one row
data = [
    ['Coffee', 4.50, 5],
    ['Tea', 3.80, 2],
    ['Juice', 5.20, 120],
    ['Water', 1.50, 0]
]
df = pd.DataFrame(data, columns=['product', 'price', 'calories'])
print(df)
TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(3) A partir de uma Lista de Dicionários

▶ Exemplo: Criando um DataFrame a partir de uma Lista de Dicionários (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

# List of dicts: each dict = one row
data = [
    {'product': 'Coffee', 'price': 4.50, 'calories': 5},
    {'product': 'Tea', 'price': 3.80, 'calories': 2},
    {'product': 'Juice', 'price': 5.20, 'calories': 120}
]
df = pd.DataFrame(data)
print(df)
# Missing keys become NaN
data2 = [
    {'product': 'Coffee', 'price': 4.50},
    {'product': 'Tea', 'calories': 2}
]
df2 = pd.DataFrame(data2)
print(df2)
#   product  price  calories
# 0  Coffee   4.50       NaN
# 1     Tea    NaN       2.0
TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(4) A partir de um ndarray NumPy

▶ Exemplo: Criando um DataFrame a partir de um ndarray (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import numpy as np
import pandas as pd

arr = np.random.randn(4, 3)  # 4 rows, 3 columns of random numbers
df = pd.DataFrame(arr, columns=['A', 'B', 'C'])
print(df.shape)   # (4, 3)
print(df.dtypes)  # all float64
TEXT 📖 Somente leitura
> **Saída:** Execute em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instaleado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(5) Comparação dos Métodos de Criação

Método Sintaxe Características Caso de Uso
Dicionário pd.DataFrame({'col': [dados]}) Orientado a colunas, mais natural Mais comum
Lista de listas pd.DataFrame([[l1c1, ...], ...]) Orientado a linhas Construir linha por linha
Lista de dicionários pd.DataFrame([{'col': val, ...}, ...]) Orientado a linhas, chaves faltantes viram NaN automaticamente Dados de API/JSON
ndarray pd.DataFrame(np.array(...)) Dados homogêneos Converter dados NumPy
read_csv pd.read_csv('arquivo.csv') Carregar de arquivo Mais comum em projetos reais


5. Inspecionando e Explorando Dados

(1) Pré-visualização Rápida: head / tail / sample

▶ Exemplo: Pré-visualizando um DataFrame (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar levemente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard',
             'Mouse', 'Headset', 'Speaker', 'Camera', 'Charger'],
    'price': [999.99, 699.99, 349.99, 449.99, 79.99,
              29.99, 149.99, 89.99, 599.99, 19.99],
    'stock': [50, 120, 80, 35, 200, 300, 150, 180, 25, 500]
})

print(df.head())      # first 5 rows
print(df.head(3))     # first 3 rows
print(df.tail(2))     # last 2 rows
print(df.sample(3))   # random 3 rows (for inspection)
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar levemente dependendo da sua versão do pandas.

(2) Visão Geral dos Dados: info

▶ Exemplo: O Método info em Detalhes (Dificuldade ⭐⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar levemente dependendo da sua versão do pandas.
PYTHON
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'Carol', 'David'],
    'age': [28, 34, 25, 30, 45],
    'salary': [75000.0, 92000.0, np.nan, 88000.0, 105000.0],
    'department': ['Sales', 'Engineering', 'Marketing', 'Sales', 'Management']
})

df.info()
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 5 entries, 0 to 4
# Data columns (total 4 columns):
#  #   Column      Non-Null Count  Dtype
# ---  ------      --------------  -----
#  0   name        5 non-null      object
#  1   age         5 non-null      int64
#  2   salary      4 non-null      float64  ← 1 missing value!
#  3   department  5 non-null      object
# dtypes: float64(1), int64(1), object(2)
# memory usage: 288.0+ bytes
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar levemente dependendo da sua versão do pandas.

info() é o primeiro passo na análise de dados — ele lhe diz: quantas linhas existem, o dtype de cada coluna, se há valores ausentes e o uso de memória.

(3) Resumo Estatístico: describe

▶ Exemplo: Resumo Estatístico com describe (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar levemente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

df = pd.DataFrame({
    'price': [999.99, 699.99, 349.99, 449.99, 79.99],
    'stock': [50, 120, 80, 35, 200],
    'rating': [4.7, 4.5, 4.3, 4.6, 4.2]
})

# Numeric columns only (default)
print(df.describe())
#           price    stock   rating
# count     5.00     5.00     5.00
# mean    515.79    97.00     4.46
# std     347.31    69.72     0.21
# min      79.99    35.00     4.20
# 25%     349.99    50.00     4.30
# 50%     449.99    80.00     4.50
# 75%     699.99   120.00     4.60
# max     999.99   200.00     4.70

# Include all columns
print(df.describe(include='all'))
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar levemente dependendo da sua versão do pandas.
Método O Que Mostra Caso de Uso
df.head() Primeiras 5 linhas Olhada rápida no formato dos dados
df.info() Contagem de linhas / dtypes das colunas / valores ausentes / memória Primeiro passo obrigatório
df.describe() Resumo estatístico das colunas numéricas Entender a distribuição
df.shape (linhas, colunas) Dimensões dos dados
df.dtypes Dtype de cada coluna Verificação de tipos


6. Propriedades Principais do DataFrame

(1) Referência Rápida de Propriedades

Propriedade Tipo Retornado Descrição Exemplo
df.shape tupla (linhas, colunas) (5, 4)
df.index Index Rótulos das linhas RangeIndex(0, 5)
df.columns Index Nomes das colunas Index(['name', 'age', ...])
df.dtypes Series Dtype de cada coluna name: object, age: int64
df.values ndarray Dados subjacentes Array 2D
df.ndim int Número de dimensões 2
df.size int Número total de elementos 20 (5 linhas x 4 cols)
df.T DataFrame Transposta Linhas e colunas trocadas

▶ Exemplo: Propriedades Principais numa Olhada (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente local Python (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [28, 34, 25],
    'salary': [75000.0, 92000.0, 68000.0]
})

print(f"Shape:    {df.shape}")      # (3, 3)
print(f"Index:    {df.index}")      # RangeIndex(0, 3)
print(f"Columns:  {df.columns}")    # Index(['name', 'age', 'salary'])
print(f"Dtypes:\n{df.dtypes}")
print(f"Size:     {df.size}")       # 9
print(f"Ndim:     {df.ndim}")       # 2
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente local Python (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(2) Seleção e Adição de Colunas

▶ Exemplo: Operações com Colunas (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente local Python (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [28, 34, 25],
    'salary': [75000.0, 92000.0, 68000.0]
})

# Selecionar coluna única → Series
print(type(df['name']))   # <class 'pandas.core.series.Series'>

# Selecionar múltiplas colunas → DataFrame
print(df[['name', 'salary']])

# Adicionar nova coluna
df['bonus'] = df['salary'] * 0.1
df['level'] = df['age'].apply(lambda x: 'Senior' if x >= 30 else 'Junior')
print(df)
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente local Python (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

(3) Transposição

▶ Exemplo: Transpondo um DataFrame (Dificuldade ⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente local Python (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd

df = pd.DataFrame({
    'Q1': [320, 280, 350],
    'Q2': [410, 390, 420]
}, index=['Product A', 'Product B', 'Product C'])

print(df.T)
#              Product A  Product B  Product C
# Q1          320        280        350
# Q2          410        390        420
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente local Python (pandas 2.x). O servidor Piston não tem pandas pré-instalado — instale localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.


7. Exemplo Completo: Tabela de Produto de E-Commerce de Ponta a Ponta

▶ Exemplo: Criação e Exploração de Dados de Produto (Dificuldade ⭐⭐⭐)

TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.
PYTHON
import pandas as pd
import numpy as np

# ============================================
# Exemplo completo: Criação e exploração de
# tabela de produto de e-commerce
# ============================================

# 1. Criar DataFrame
products = pd.DataFrame({
    'name': ['Laptop', 'Phone', 'Tablet', 'Monitor', 'Keyboard',
             'Mouse', 'Headset', 'Speaker'],
    'category': ['Electronics', 'Electronics', 'Electronics',
                 'Electronics', 'Accessories', 'Accessories',
                 'Accessories', 'Accessories'],
    'price': [999.99, 699.99, 349.99, 449.99, 79.99,
              29.99, 149.99, 89.99],
    'stock': [50, 120, 80, 35, 200, 300, 150, 180],
    'rating': [4.7, 4.5, 4.3, 4.6, 4.2, 4.0, 4.4, 4.1]
})

# 2. Visão Geral
print("=== Visão Geral do Catálogo de Produtos ===")
print(f"Produtos: {len(products)}")
print(f"Categorias: {products['category'].unique().tolist()}")
print(f"Colunas: {products.columns.tolist()}")

# 3. Tipos de dados e memória
print(f"\n=== Tipos de Dados ===")
print(products.dtypes)
print(f"\nUso de memória: {products.memory_usage(deep=True).sum() / 1024:.1f} KB")

# 4. Estatísticas rápidas
print(f"\n=== Estatísticas de Preço ===")
print(products['price'].describe())

# 5. Valor do inventário por produto
products['inventory_value'] = products['price'] * products['stock']
print(f"\n=== Top 3 por Valor de Inventário ===")
print(products.nlargest(3, 'inventory_value')[['name', 'inventory_value']])

# 6. Resumo por categoria
print(f"\n=== Resumo por Categoria ===")
cat_summary = products.groupby('category').agg(
    count=('name', 'count'),
    avg_price=('price', 'mean'),
    total_stock=('stock', 'sum')
)
print(cat_summary)
TEXT 📖 Somente leitura
> **Saída:** Execute isso em um ambiente Python local (pandas 2.x). O servidor Piston não tem o pandas pré-instalado — instale-o localmente (`pip install pandas`) para acompanhar. Os valores reais podem variar ligeiramente dependendo da sua versão do pandas.

Saída esperada (trecho):

TEXT 📖 Somente leitura
=== Visão Geral do Catálogo de Produtos ===
Produtos: 8
Categorias: ['Electronics', 'Accessories']
Colunas: ['name', 'category', 'price', 'stock', 'rating']

=== Estatísticas de Preço ===
count       8.00
mean      349.99
std       339.32
min        29.99
max       999.99

=== Top 3 por Valor de Inventário ===
      name  inventory_value
0   Laptop         49999.50
1    Phone         83998.80
3  Monitor         15749.65

=== Resumo por Categoria ===
              count  avg_price  total_stock
category
Accessories       4      87.24          830
Electronics       4     624.99          285

❓ Perguntas Frequentes

P Qual é a relação entre DataFrame e Series?
R Um DataFrame é uma coleção ordenada de Series — cada coluna é uma Series, e todas as colunas compartilham o mesmo Índice de linhas. Selecionar uma única coluna retorna uma Series; selecionar múltiplas colunas retorna um DataFrame. Selecionar uma única linha também retorna uma Series (com os nomes das colunas como Índice).
P É possível acessar colunas por índice numérico?
R Sim. Se os nomes das colunas forem inteiros (por exemplo, 0, 1, 2), usar df[0] é ambíguo — o Pandas o trata como um nome de coluna, não uma posição. Nesse caso, use df.iloc[:, 0] para acesso posicional ou df.loc[:, 0] para acesso baseado em rótulos. É melhor usar nomes de colunas como strings para evitar confusão.
P Qual é a diferença entre info e describe?
R info mostra informações estruturais (contagem de linhas / tipos de dados das colunas / valores ausentes / memória), enquanto describe mostra um resumo estatístico (média / desvio padrão / quartis / mínimo-máximo). info responde "como os dados são", e describe responde "como os valores estão distribuídos". Eles se complementam — verifique ambos quando encontrar um conjunto de dados pela primeira vez.
P Como adiciono ou removo colunas?
R Para adicionar uma coluna, use df['nova_col'] = valores (anexada ao final) ou df.insert(pos, 'nova_col', valores) (em uma posição específica). Para remover uma coluna, use df.drop('col', axis=1) ou del df['col']. drop retorna um novo DataFrame (o original permanece inalterado), enquanto del modifica no local.
P O que values retorna?
R df.values retorna o ndarray 2D subjacente do NumPy. Se o DataFrame tiver tipos mistos (por exemplo, objeto + int64), o dtype do ndarray é promovido para objeto, perdendo desempenho vetorizado. Para DataFrames puramente numéricos, values mantém o dtype numérico.
P Como faço para transpor um DataFrame?
R Use df.T ou df.transpose(). Após a transposição, linhas se tornam colunas e colunas se tornam linhas. Observação: se o DataFrame original tiver tipos mistos, todas as colunas se tornam dtype objeto após a transposição (porque o ndarray requer tipos homogêneos).
P Devo usar um dicionário ou uma lista para criar um DataFrame?
R Um dicionário é a abordagem mais natural (chaves = nomes das colunas, valores = dados das colunas) e é recomendado para uso diário. Uma lista de dicionários é adequada para construção linha por linha (por exemplo, dados JSON de uma API). Um ndarray é adequado para dados puramente numéricos. Em projetos reais, 80% das vezes você usará pd.read_csv() para carregar a partir de um arquivo.

📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Crie uma tabela de alunos (nome / matemática / inglês / ciências) usando 3 métodos diferentes, depois imprima as informações e descreva os resultados.
  2. Intermediário (Dificuldade ⭐⭐): Crie uma tabela de funcionários com valores ausentes (nome / idade / salário / departamento, onde o salário tem 2 entradas NaN), então: use info para verificar valores ausentes → calcule a proporção de não nulos para cada coluna → adicione uma coluna salary_level (salário > 80000 é "Alto", caso contrário "Baixo", NaN é "Desconhecido").
  3. Desafio (Dificuldade ⭐⭐⭐): Construa um DataFrame a partir de uma lista de dicionários (5 registros, algumas chaves ausentes), então: verifique valores ausentes → preencha com média/moda da coluna → conte campos não nulos por linha → adicione uma coluna de completude (proporção de não nulos), e finalmente emita um relatório describe completo.

← Previous: Introduction to Series · Next: The Index System →

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%