Este guia explora as funcionalidades essenciais da biblioteca Pandas em Python para a análise de dados. Começaremos carregando e inspecionando um conjunto de dados a partir de um arquivo CSV.
import pandas as pd
# Defina o caminho para o seu arquivo CSV
caminho_arquivo = r'F:\DadosAnalise\info_alimentos.csv'
# Use 'with' para garantir que o arquivo seja fechado corretamente
with open(caminho_arquivo, 'r', encoding='utf-8') as f:
dados_alimentos = pd.read_csv(f)
# Exibe o tipo do objeto carregado (deve ser um DataFrame)
print(f"Tipo do objeto: {type(dados_alimentos)}")
# Mostra os tipos de dados de cada coluna
print("\nTipos de dados das colunas:")
print(dados_alimentos.dtypes)
Inspeção Inicial dos Dados
Após carregar os dados, é crucial ter uma visão geral do conteúdo. Funções como head(), tail() e columns são úteis para isso.
# Exibe as primeiras 3 linhas do DataFrame
print("Primeiras 3 linhas:")
print(dados_alimentos.head(3))
# Exibe as últimas 3 linhas do DataFrame
print("\nÚltimas 3 linhas:")
print(dados_alimentos.tail(3))
# Lista todas as colunas do DataFrame
print("\nNomes das colunas:")
print(dados_alimentos.columns)
Ordenação de Dados
A ordenação dos dados é uma operação comum para analisar tendências. O método sort_values() permite organizar o DataFrame com base em uma ou mais colunas.
# Ordena o DataFrame pela coluna 'Carbohydrt_(g)' em ordem crescente
dados_alimentos.sort_values('Carbohydrt_(g)', inplace=True)
print("Carboidratos (g) - Ordem Crescente:")
print(dados_alimentos['Carbohydrt_(g)'])
# Ordena o DataFrame pela coluna 'Carbohydrt_(g)' em ordem decrescente
dados_alimentos.sort_values('Carbohydrt_(g)', inplace=True, ascending=False)
print("\nCarboidratos (g) - Ordem Decrescente:")
print(dados_alimentos['Carbohydrt_(g)'])
Filtragem e Tratamento de Dados Ausentes
Identificar e contar valores ausentes é fundamental para a limpeza dos dados. O Pandas oferece métodos convenientes para essa tarefa.
# Supondo que 'dados_passageiros' seja um DataFrame com uma coluna 'Age'
# Exemplo hipotético:
# dados_passageiros = pd.read_csv('titanic.csv')
# age_coluna = dados_passageiros['Age']
# Criando um DataFrame de exemplo para demonstração
dados_exemplo = pd.DataFrame({'Age': [22, 35, None, 45, None, 28]})
age_coluna = dados_exemplo['Age']
# Verifica quais valores na coluna 'Age' são nulos (NaN)
age_ausente_mask = pd.isnull(age_coluna)
# Seleciona apenas os valores nulos
age_nulos_selecionados = age_coluna[age_ausente_mask]
# Conta o número de valores nulos
contagem_nulos = len(age_nulos_selecionados)
print(f"Número de idades ausentes: {contagem_nulos}")
# Outra forma de contar valores nulos usando a máscara booleana
contagem_nulos_metodo2 = age_ausente_mask.sum()
print(f"Número de idades ausentes (método 2): {contagem_nulos_metodo2}")
Cálculo de Estatísticas Descritivas
Calcular médias e outras estatísticas é uma tarefa comum. O Pandas simplifica esses cálculos, inclusive tratendo valores ausentes automaticamente.
# Supondo que 'dados_passageiros' seja um DataFrame com uma coluna 'Age'
# Exemplo hipotético:
# dados_passageiros = pd.read_csv('titanic.csv')
# age_coluna = dados_passageiros['Age']
# Recriando o DataFrame de exemplo
dados_exemplo = pd.DataFrame({'Age': [22, 35, None, 45, None, 28]})
age_coluna = dados_exemplo['Age']
# Calcula a média da coluna 'Age', ignorando valores nulos
media_age_correta = age_coluna.mean()
print(f"Média de idade (ignorando nulos): {media_age_correta:.2f}")
Tabelas Dinâmicas (Pivot Tables)
As tabelas dinâmicas são poderosas para resumir e agregar dados de múltiplas maneiras, especialmente úteis para explorar relações entre diferentes variáveis.
import numpy as np
# Exemplo hipotético de DataFrame 'dados_tripulantes'
# Suponha que este DataFrame contenha colunas como 'Pclass', 'Survived', 'Fare', 'Embarked'
# dados_tripulantes = pd.read_csv('titanic.csv')
# Criando um DataFrame de exemplo para demonstração
dados_tripulantes = pd.DataFrame({
'Pclass': [1, 2, 3, 1, 2, 3, 1, 2, 3],
'Survived': [1, 0, 0, 1, 1, 0, 0, 1, 0],
'Fare': [71.28, 13.0, 7.25, 53.1, 26.0, 8.05, 30.0, 10.5, 7.75],
'Embarked': ['S', 'S', 'S', 'S', 'S', 'S', 'C', 'C', 'Q'],
'Age': [38, 25, 21, 55, 28, 18, 40, 22, None]
})
# Média de sobrevivência por classe de passageiro
sobrevivencia_por_classe = dados_tripulantes.pivot_table(index='Pclass', values='Survived', aggfunc=np.mean)
print("Média de Sobrevivência por Classe:")
print(sobrevivencia_por_classe)
# Média de idade por classe de passageiro
idade_media_por_classe = dados_tripulantes.pivot_table(index='Pclass', values='Age')
print("\nMédia de Idade por Classe:")
print(idade_media_por_classe)
# Média de tarifa por classe de passageiro
tarifa_media_por_classe = dados_tripulantes.pivot_table(index='Pclass', values='Fare')
print("\nMédia de Tarifa por Classe:")
print(tarifa_media_por_classe)
# Soma de tarifas e contagem de sobreviventes por porto de embarque
estatisticas_porto = dados_tripulantes.pivot_table(index='Embarked', values=['Fare', 'Survived'], aggfunc=np.sum)
print("\nEstatísticas de Tarifa e Sobrevivência por Porto:")
print(estatisticas_porto)
Aplicação de Funções Personalizadas
O método apply() permite aplicar funções personalizadas a linhas ou colunas de um DataFrame, possibilitando operações mais complexas.
# Exemplo hipotético de DataFrame 'dados_rotulos'
# Suponha que este DataFrame contenha uma coluna 'AlgumValor' e possua pelo menos 100 linhas
# dados_rotulos = pd.read_csv('algum_dataset.csv')
# Criando um DataFrame de exemplo para demonstração
dados_rotulos = pd.DataFrame({
'PrimeiraColuna': list(range(100)),
'OutraColuna': [f'Item_{i}' for i in range(100)]
})
dados_rotulos.loc[99, 'PrimeiraColuna'] = 999 # Adiciona um valor específico na linha 99
# Função para retornar o valor da 100ª linha (índice 99) de uma coluna
def obter_cent_linha(coluna):
return coluna.loc[99]
# Aplica a função a cada coluna do DataFrame
rotulo_cent_linha = dados_rotulos.apply(obter_cent_linha)
print("Valor da 100ª linha para cada coluna:")
print(rotulo_cent_linha)
# Função para classificar a classe do passageiro
def classificar_classe(linha):
classe = linha['Pclass'] # Assume que 'Pclass' existe no DataFrame
if pd.isnull(classe):
return 'Desconhecida'
elif classe == 1:
return "Primeira Classe"
elif classe == 2:
return "Segunda Classe"
elif classe == 3:
return "Terceira Classe"
else:
return 'Inválida'
# Recriando o DataFrame de exemplo com 'Pclass'
dados_tripulantes_ex = pd.DataFrame({
'Pclass': [1, 2, 3, 1, 2, 3, 1, 2, 3, None],
'Survived': [1, 0, 0, 1, 1, 0, 0, 1, 0, 0],
'Fare': [71.28, 13.0, 7.25, 53.1, 26.0, 8.05, 30.0, 10.5, 7.75, 15.0],
})
# Aplica a função 'classificar_classe' a cada linha (axis=1)
classes_passageiros = dados_tripulantes_ex.apply(classificar_classe, axis=1)
print("\nClassificação das Classes dos Passageiros:")
print(classes_passageiros)
Estrutura de Dados Series
Uma Series é essencialmente uma coluna de um DataFrame ou um array unidimensional rotulado. É a estrutura de dados fundamental do Pandas.
from pandas import Series
# Carregando um novo conjunto de dados para exemplificar Series
caminho_avaliacao = r'F:\DadosAnalise\comparacao_notas_fandango.csv'
with open(caminho_avaliacao, 'r', encoding='utf-8') as f:
dados_avaliacao = pd.read_csv(f)
# Cria uma Series a partir da coluna 'FILM'
series_filmes = dados_avaliacao['FILM']
print(f"Tipo da Series de Filmes: {type(series_filmes)}")
print("Primeiras 5 entradas da Series de Filmes:")
print(series_filmes[0:5])
# Cria uma Series a partir da coluna 'RottenTomatoes'
series_rt = dados_avaliacao['RottenTomatoes']
print("\nPrimeiras 5 pontuações Rotten Tomatoes:")
print(series_rt[0:5])
# Converte os valores das Series em arrays NumPy
nomes_filmes_array = series_filmes.values
pontuacoes_rt_array = series_rt.values
# Cria uma nova Series usando os nomes dos filmes como índice
series_customizada = Series(pontuacoes_rt_array, index=nomes_filmes_array)
# Seleciona entradas específicas usando os nomes dos filmes como índice
print("\nSeleção específica da Series Customizada:")
print(series_customizada[['Minions (2015)', 'Leviathan (2014)']])