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.
1. O que você aprenderá
- ❶ A essência de um DataFrame (uma coleção de Series)
- ❷ O sistema de indexação linhas/colunas (Index + Columns)
- ❸ Múltiplas formas de criar um DataFrame
- ❹ Inspecionar os dados (info / describe / head / tail)
- ❺ Propriedades principais (shape / index / columns / dtypes / values)
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.
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!
> **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 ⭐)
> **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.
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
> **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
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
> **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 |
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 ⭐)
> **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.
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'])
> **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 ⭐)
> **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.
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)
> **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 ⭐)
> **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.
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
> **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 ⭐)
> **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.
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
> **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 ⭐)
> **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.
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)
> **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 ⭐⭐)
> **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.
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
> **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 ⭐)
> **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.
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'))
> **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 ⭐)
> **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.
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
> **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 ⭐)
> **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.
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)
> **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 ⭐)
> **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.
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
> **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 ⭐⭐⭐)
> **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.
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)
> **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):
=== 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
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.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.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.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).pd.read_csv() para carregar a partir de um arquivo.📖 Resumo
- Um DataFrame é essencialmente uma coleção ordenada de Series — cada coluna tem um dtype independente, e todas compartilham o mesmo Índice de linhas
- Índice de linhas + Colunas formam um sistema de rotulação 2D, tornando os dados autodescritivos
- Métodos de criação: dicionário (mais comum) / lista de listas / lista de dicionários / ndarray / read_csv
- Trio de exploração de dados: head() para formato → info() para estrutura → describe() para distribuição
- Propriedades principais: shape / index / columns / dtypes / values / T
- Seleção de colunas:
df['col']retorna uma Series,df[['c1','c2']]retorna um DataFrame - Adicionar colunas com
df['new'] = ..., remover colunas comdf.drop('col', axis=1)
📝 Exercícios
- 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.
- 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
infopara verificar valores ausentes → calcule a proporção de não nulos para cada coluna → adicione uma colunasalary_level(salário > 80000 é "Alto", caso contrário "Baixo", NaN é "Desconhecido"). - 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
describecompleto.
← Previous: Introduction to Series · Next: The Index System →