Trabalhar com arquivos CSV no Python é uma das habilidades mais importantes para quem atua com análise de dados. CSV significa “Comma-Separated Values” (Valores Separados por Vírgula) e é um formato extremamente popular para armazenar e trocar dados tabulares. Se você está começando sua jornada em Python, dominar a manipulação de arquivos CSV abrirá muitas portas no mercado de trabalho.
Neste guia completo, você aprenderá desde os conceitos básicos até técnicas avançadas para ler, escrever e manipular arquivos CSV. Vamos explorar tanto a biblioteca padrão do Python quanto ferramentas poderosas como Pandas, que facilitam muito o trabalho com grandes volumes de dados.
Para complementar seu aprendizado, assista a este vídeo do canal Hashtag Programação que explica de forma prática como trabalhar com CSV:
O que são arquivos CSV e por que são importantes
Arquivos CSV são documentos de texto simples que organizam dados em linhas e colunas. Cada linha representa um registro e as colunas são separadas por vírgulas (ou outros delimitadores como ponto e vírgula). Esse formato é universal e pode ser aberto em praticamente qualquer programa, desde editores de texto até planilhas como Excel.
A popularidade dos arquivos CSV vem de sua simplicidade e portabilidade. Diferente de formatos proprietários, CSV não depende de software específico. Isso torna perfeito para compartilhar dados entre diferentes sistemas e linguagens de programação. Empresas usam CSV para exportar relatórios, bancos de dados utilizam para backup, e cientistas de dados preferem pela facilidade de manipulação.
Um exemplo típico de arquivo CSV contendo informações de produtos ficaria assim:
nome,preco,quantidade
Notebook,2500.00,10
Mouse,45.90,150
Teclado,120.00,80Repare que a primeira linha geralmente contém os cabeçalhos, indicando o nome de cada coluna. As linhas seguintes trazem os dados propriamente ditos. Essa estrutura simples facilita tanto a leitura humana quanto o processamento por máquinas.
Lendo arquivos CSV com a biblioteca padrão do Python
Python possui uma biblioteca nativa chamada csv que permite trabalhar com esses arquivos sem instalar nada adicional. Vamos começar com um exemplo básico de leitura:
import csv
with open('produtos.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo)
for linha in leitor:
print(linha)Neste código, usamos a função open() para abrir o arquivo no modo leitura (‘r’). O parâmetro encoding=’utf-8′ garante que caracteres especiais em português sejam lidos corretamente. A função csv.reader() cria um objeto que itera sobre cada linha do arquivo.
Cada linha retornada é uma lista contendo os valores separados por vírgula. O uso de with é uma boa prática porque fecha o arquivo automaticamente após o uso, evitando problemas de memória.
Se preferir trabalhar com dicionários em vez de listas, o método DictReader é mais conveniente:
import csv
with open('produtos.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.DictReader(arquivo)
for linha in leitor:
print(f"Produto: {linha['nome']}, Preço: R$ {linha['preco']}")Com DictReader, cada linha se torna um dicionário onde as chaves são os cabeçalhos do CSV. Isso torna o código mais legível e menos propenso a erros, pois você acessa os dados por nome em vez de índice numérico.
Escrevendo dados em arquivos CSV
Criar e escrever em arquivos CSV é tão simples quanto ler. Veja como salvar uma lista de dados:
import csv
produtos = [
['nome', 'preco', 'quantidade'],
['Notebook', 2500.00, 10],
['Mouse', 45.90, 150],
['Teclado', 120.00, 80]
]
with open('novos_produtos.csv', 'w', newline='', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo)
escritor.writerows(produtos)O modo ‘w’ sobrescreve o arquivo se ele já existir. Use ‘a’ para adicionar conteúdo ao final de um arquivo existente. O parâmetro newline=” previne problemas com linhas em branco extras no Windows.
Para escrever usando dicionários, utilize DictWriter:
import csv
produtos = [
{'nome': 'Notebook', 'preco': 2500.00, 'quantidade': 10},
{'nome': 'Mouse', 'preco': 45.90, 'quantidade': 150}
]
with open('produtos_dict.csv', 'w', newline='', encoding='utf-8') as arquivo:
campos = ['nome', 'preco', 'quantidade']
escritor = csv.DictWriter(arquivo, fieldnames=campos)
escritor.writeheader() # Escreve o cabeçalho
escritor.writerows(produtos)O método writeheader() cria automaticamente a primeira linha com os nomes das colunas. Isso economiza código e reduz erros ao garantir que os cabeçalhos correspondam aos dados.
Trabalhando com diferentes delimitadores
Nem todos os arquivos CSV usam vírgula como separador. No Brasil, é comum encontrar arquivos usando ponto e vírgula (;) devido ao uso da vírgula como separador decimal. Python permite especificar qualquer delimitador:
import csv
# Lendo arquivo com ponto e vírgula
with open('dados.csv', 'r', encoding='utf-8') as arquivo:
leitor = csv.reader(arquivo, delimiter=';')
for linha in leitor:
print(linha)
# Escrevendo com delimitador personalizado
with open('saida.csv', 'w', newline='', encoding='utf-8') as arquivo:
escritor = csv.writer(arquivo, delimiter='|')
escritor.writerow(['coluna1', 'coluna2', 'coluna3'])O parâmetro delimiter aceita qualquer caractere. Além disso, você pode configurar o quotechar (caractere de citação) e escapechar (caractere de escape) para lidar com situações especiais onde os dados contêm o próprio delimitador.
Usando Pandas para operações avançadas com CSV
Para trabalhos mais complexos com dados, a biblioteca Pandas é imbatível. Ela oferece estruturas de dados poderosas e funções otimizadas que facilitam análise, limpeza e transformação de grandes volumes de informação.
Antes de usar Pandas, você precisa instalá-la. Abra seu terminal e execute:
pip install pandasLer um arquivo CSV com Pandas é extremamente simples:
import pandas as pd
# Leitura básica
df = pd.read_csv('produtos.csv')
print(df)
# Visualizar primeiras linhas
print(df.head())
# Informações sobre o dataset
print(df.info())A função read_csv() carrega os dados em um DataFrame, que é como uma planilha dentro do Python. Você pode visualizar, filtrar, ordenar e fazer cálculos de forma muito intuitiva.
Pandas detecta automaticamente o tipo de dados de cada coluna. Você pode personalizar essa leitura com diversos parâmetros:
import pandas as pd
df = pd.read_csv('vendas.csv',
delimiter=';',
encoding='latin-1',
decimal=',',
thousands='.',
parse_dates=['data_venda'],
index_col='id')Este exemplo mostra como lidar com particularidades de arquivos brasileiros: ponto e vírgula como delimitador, vírgula como separador decimal, ponto como separador de milhares, e conversão automática de datas.
Manipulando e filtrando dados CSV com Pandas
Depois de carregar os dados, Pandas oferece inúmeras formas de manipulá-los. Veja exemplos práticos:
import pandas as pd
df = pd.read_csv('vendas.csv')
# Filtrar produtos com preço acima de 100 reais
produtos_caros = df[df['preco'] > 100]
# Selecionar colunas específicas
nomes_precos = df[['nome', 'preco']]
# Ordenar por preço decrescente
df_ordenado = df.sort_values('preco', ascending=False)
# Calcular estatísticas
preco_medio = df['preco'].mean()
total_estoque = df['quantidade'].sum()
print(f"Preço médio: R$ {preco_medio:.2f}")
print(f"Total em estoque: {total_estoque} unidades")Pandas também facilita a criação de novas colunas calculadas. Por exemplo, calcular o valor total do estoque:
df['valor_total'] = df['preco'] * df['quantidade']
# Agrupar dados por categoria
resumo = df.groupby('categoria')['valor_total'].sum()
print(resumo)Essas operações seriam muito mais trabalhosas usando apenas a biblioteca csv padrão. Pandas foi projetada especificamente para tornar análise de dados eficiente e expressiva.
Salvando DataFrames como arquivos CSV
Após processar seus dados, você pode salvá-los facilmente de volta em formato CSV:
import pandas as pd
df = pd.read_csv('dados_originais.csv')
# Fazer algum processamento
df['preco_com_desconto'] = df['preco'] * 0.9
# Salvar resultado
df.to_csv('dados_processados.csv', index=False, encoding='utf-8')
# Salvar formato brasileiro
df.to_csv('dados_br.csv',
sep=';',
decimal=',',
encoding='utf-8',
index=False)O parâmetro index=False evita salvar a coluna de índice do DataFrame, que geralmente não é necessária. Configure sep e decimal para adaptar o arquivo ao padrão brasileiro quando necessário.
Lidando com arquivos CSV grandes
Quando você trabalha com arquivos muito grandes que não cabem na memória, Pandas oferece estratégias inteligentes. Uma delas é ler o arquivo em pedaços:
import pandas as pd
tamanho_pedaco = 10000
processador = pd.read_csv('arquivo_grande.csv', chunksize=tamanho_pedaco)
for pedaco in processador:
# Processar cada pedaço separadamente
resultado = pedaco[pedaco['valor'] > 1000]
print(f"Registros encontrados neste pedaço: {len(resultado)}")Outra técnica é carregar apenas as colunas necessárias:
colunas_necessarias = ['nome', 'preco', 'quantidade']
df = pd.read_csv('produtos.csv', usecols=colunas_necessarias)
# Ou pular linhas do início do arquivo
df = pd.read_csv('dados.csv', skiprows=1000, nrows=5000)Essas abordagens permitem trabalhar com datasets de gigabytes mesmo em computadores com memória limitada. A chave é processar os dados incrementalmente em vez de tentar carregar tudo de uma vez.
Tratando dados ausentes e erros
Arquivos CSV do mundo real frequentemente contêm dados faltantes ou inconsistentes. Pandas facilita identificar e tratar esses problemas:
import pandas as pd
df = pd.read_csv('vendas_incompletas.csv')
# Verificar valores ausentes
print(df.isnull().sum())
# Remover linhas com valores ausentes
df_limpo = df.dropna()
# Preencher valores ausentes com média
df['preco'].fillna(df['preco'].mean(), inplace=True)
# Substituir valores específicos
df['quantidade'].replace(0, 1, inplace=True)Para tratar erros de leitura, use o parâmetro error_bad_lines:
df = pd.read_csv('dados_problematicos.csv',
error_bad_lines=False,
warn_bad_lines=True)Isso ignora linhas malformadas e exibe avisos sobre os problemas encontrados, permitindo que você carregue o arquivo mesmo com algumas inconsistências.
Convertendo entre CSV e outros formatos
Pandas facilita conversões entre diferentes formatos de arquivo. Você pode ler CSV e exportar para Excel, JSON, ou bancos de dados:
import pandas as pd
df = pd.read_csv('dados.csv')
# Exportar para Excel
df.to_excel('dados.xlsx', sheet_name='Planilha1', index=False)
# Exportar para JSON
df.to_json('dados.json', orient='records', force_ascii=False)
# Exportar para HTML (útil para relatórios)
df.to_html('relatorio.html', index=False)E claro, funciona no sentido inverso também. Você pode ler Excel ou JSON e salvar como CSV, criando um fluxo de trabalho flexível para diferentes necessidades de projeto.
Boas práticas ao trabalhar com arquivos CSV
Para evitar problemas comuns e escrever código mais robusto, siga estas recomendações:
Sempre especifique o encoding. Arquivos brasileiros frequentemente usam ‘utf-8’ ou ‘latin-1’. Testar ambos pode economizar horas de debugging.
Use o contexto with para abrir arquivos. Isso garante que o arquivo seja fechado corretamente mesmo se ocorrer um erro durante o processamento.
Valide seus dados após carregar. Use df.info(), df.describe() e df.head() para verificar se os dados foram lidos corretamente antes de processá-los.
Mantenha backups dos arquivos originais. Antes de sobrescrever um CSV, faça uma cópia. Erros acontecem e ter o arquivo original pode salvar seu trabalho.
Documente o formato esperado. Se outras pessoas vão usar seu código, explique o formato CSV esperado, incluindo delimitador, encoding e estrutura de colunas.
Trate exceções adequadamente. Use blocos try-except para lidar com arquivos inexistentes ou corrompidos de forma elegante:
import pandas as pd
try:
df = pd.read_csv('dados.csv')
except FileNotFoundError:
print("Arquivo não encontrado! Verifique o caminho.")
except pd.errors.EmptyDataError:
print("O arquivo está vazio!")
except Exception as e:
print(f"Erro inesperado: {e}")Aplicações práticas de CSV em projetos reais
Arquivos CSV aparecem em inúmeros cenários profissionais. Sistemas de e-commerce exportam relatórios de vendas em CSV. Bancos de dados permitem backup e migração via CSV. Aplicações web frequentemente importam dados de planilhas convertidas para CSV.
Em ciência de dados, CSV é o formato padrão para compartilhar datasets de treinamento. Plataformas como Kaggle disponibilizam milhares de conjuntos de dados em CSV. Dominar a manipulação desses arquivos é essencial para competir em desafios de machine learning.
Desenvolvedores também usam CSV para automatizar tarefas repetitivas. Imagine ter que atualizar preços de centenas de produtos manualmente. Com Python e CSV, você escreve um script que faz isso em segundos, eliminando erros humanos.
Profissionais de negócios utilizam Python para consolidar relatórios de diferentes fontes. Cada departamento exporta seus dados em CSV, e um script Python combina tudo em uma análise unificada, economizando horas de trabalho manual.
Perguntas Frequentes (FAQ)
1. Qual a diferença entre CSV e Excel?
CSV é texto puro que armazena apenas dados tabulares, enquanto Excel pode conter fórmulas, formatação e múltiplas planilhas. CSV é mais leve e universal.
2. Como abrir arquivo CSV com acentos corretamente?
Use encoding=’utf-8′ ao abrir o arquivo. Se não funcionar, tente ‘latin-1’ ou ‘iso-8859-1’, comuns em sistemas Windows antigos.
3. Pandas ou biblioteca csv, qual usar?
Para análise de dados e operações complexas, use Pandas. Para tarefas simples de leitura/escrita, a biblioteca csv padrão é suficiente e mais leve.
4. Como lidar com arquivos CSV muito grandes?
Use o parâmetro chunksize do Pandas para processar o arquivo em pedaços, ou carregue apenas as colunas necessárias com usecols.
5. É possível ler CSV diretamente de uma URL?
Sim! Tanto csv quanto Pandas suportam isso. Com Pandas: df = pd.read_csv(‘https://exemplo.com/dados.csv’).
6. Como salvar CSV sem a coluna de índice?
Ao usar to_csv do Pandas, adicione o parâmetro index=False para não incluir o índice no arquivo salvo.
7. CSV pode conter caracteres especiais?
Sim, desde que o encoding correto seja usado. UTF-8 suporta todos os caracteres Unicode, incluindo emojis e acentos.
8. Como converter Excel para CSV em Python?
Use Pandas: pd.read_excel(‘arquivo.xlsx’).to_csv(‘saida.csv’, index=False). Simples e funciona para qualquer planilha.
9. É seguro armazenar senhas em CSV?
Não! CSV é texto puro sem criptografia. Para dados sensíveis, use bancos de dados com segurança adequada ou arquivos criptografados.
10. Como remover duplicatas de um CSV?
Com Pandas: df.drop_duplicates(inplace=True) remove todas as linhas duplicadas do DataFrame antes de salvar.








