Escrevendo DataFrames em arquivos
Exporte um DataFrame limpo para CSV e Excel com to_csv e to_excel, controlando o índice e o formato de números de ponto flutuante.
Escrevendo DataFrames em arquivos é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
Por que a exportação é importante
A análise de dados raramente termina dentro do Python. Você precisa compartilhar conjuntos de dados limpos com as partes interessadas, enviar resultados para outras ferramentas ou arquivar dados processados para garantir a reprodutibilidade. O pandas fornece to_csv(), to_excel(), to_json() e to_parquet() — correspondentes às funções de leitura e aceitando a maioria dos mesmos parâmetros de configuração.
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
df.to_csv('results.csv')
df.to_excel('results.xlsx')
df.to_json('results.json', orient='records')to_csv(): a armadilha do índice
Por padrão, to_csv() grava o índice das linhas como a primeira coluna, criando uma coluna unnamed: 0 quando o arquivo é lido novamente. Passe index=False para omitir o índice — quase sempre a escolha correta, a menos que o próprio índice contenha dados significativos, como datas. Sempre especifique index=False, a menos que tenha um motivo deliberado para incluir o índice.
import pandas as pd
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
# Include index (default -- creates 'Unnamed: 0' when re-read)
df.to_csv('with_index.csv')
# Exclude index (recommended)
df.to_csv('clean.csv', index=False)Controlando o delimitador e a codificação
Passe sep= para gravar um arquivo separado por tabulações ou por ponto e vírgula. Use encoding= para especificar UTF-8 ou outro conjunto de caracteres — algo essencial quando os valores das colunas contêm caracteres que não são ASCII, como acentos ou caracteres chineses. encoding='utf-8-sig' adiciona um BOM (marca de ordem dos bytes) para garantir compatibilidade com o Excel no Windows.
import pandas as pd
df = pd.DataFrame({'name': ['Müller', 'Tanaka'], 'val': [1, 2]})
# Tab-separated, UTF-8
df.to_csv('output.tsv', sep='\t', encoding='utf-8', index=False)
# Excel-compatible UTF-8 with BOM
df.to_csv('for_excel.csv', encoding='utf-8-sig', index=False)Controlando a formatação de números de ponto flutuante
Por padrão, o pandas grava números de ponto flutuante com precisão total. Use float_format='%.2f' para limitar a 2 casas decimais — algo importante para dados financeiros, nos quais casas decimais extras parecem incorretas para os leitores. Passe na_rep='NULL' ou na_rep='' para controlar como os valores NaN são gravados no arquivo de saída.
import pandas as pd
import numpy as np
df = pd.DataFrame({'price': [9.99, np.nan, 14.123456],
'qty': [1, 2, 3]})
df.to_csv('prices.csv',
index=False,
float_format='%.2f',
na_rep='N/A')to_excel(): gravando uma planilha
df.to_excel('file.xlsx', sheet_name='Data', index=False) grava o DataFrame em uma pasta de trabalho do Excel. Assim como em to_csv(), defina index=False, a menos que o índice seja significativo. Os parâmetros startrow= e startcol= permitem posicionar a tabela na planilha — útil para adicionar uma linha de título acima dos dados.
import pandas as pd
df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
df.to_excel('report.xlsx',
sheet_name='Sales',
index=False,
startrow=1) # leave row 0 for a titleGravando várias planilhas com ExcelWriter
Para gravar vários DataFrames em planilhas diferentes da mesma pasta de trabalho, use pd.ExcelWriter como um gerenciador de contexto. Chame df.to_excel(writer, sheet_name='Name') para cada DataFrame dentro do bloco with. A pasta de trabalho é finalizada e salva quando o contexto é encerrado. Isso evita criar vários arquivos separados para tabelas relacionadas.
import pandas as pd
df1 = pd.DataFrame({'a': [1, 2]})
df2 = pd.DataFrame({'b': [3, 4]})
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)to_json(): exportando JSON
df.to_json() serializa um DataFrame em JSON. O parâmetro orient= corresponde ao de read_json: use 'records' para uma lista de dicionários de linhas (maior interoperabilidade), 'columns' para um dicionário de vetores de colunas ou 'index' para um dicionário indexado pelo rótulo da linha. Passe indent=2 para obter uma formatação legível por humanos.
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
print(df.to_json(orient='records', indent=2))
# [
# {"name": "A", "score": 90},
# {"name": "B", "score": 75}
# ]Adicionando dados a um arquivo existente
Para adicionar linhas a um CSV existente sem sobrescrevê-lo, abra o arquivo no modo de adição usando mode='a' e defina header=False para evitar duplicar a linha de cabeçalho. Para o Excel, use ExcelWriter com mode='a'. Em fluxos de processamento de transmissão grandes, adicione os dados em partes e grave o cabeçalho apenas na primeira parte.
import pandas as pd
df_new = pd.DataFrame({'a': [5, 6], 'b': [7, 8]})
# Append to existing file, skip writing header
df_new.to_csv('existing.csv',
mode='a',
header=False,
index=False)Selecionando colunas antes da exportação
Uma boa prática antes de exportar é selecionar apenas as colunas de que o destinatário precisa e ordenar as linhas de forma lógica. Isso torna o arquivo de saída mais limpo e evita o vazamento acidental de colunas internas, como IDs internos, características codificadas ou sinalizadores de depuração. Use a seleção por colchetes e sort_values() na mesma expressão de fluxo de processamento antes de gravar.
import pandas as pd
df = pd.DataFrame({'id': [3,1,2],
'name': ['C','A','B'],
'_internal': [9,7,8]})
(df[['id', 'name']]
.sort_values('id')
.to_csv('export.csv', index=False))Verificando o arquivo gravado
Depois de gravar, sempre leia o arquivo novamente e verifique-o: confira shape, os nomes das colunas e alguns valores escolhidos aleatoriamente. Em fluxos de integração contínua, compare as somas de verificação. Para exportações financeiras críticas, confirme que os totais agregados correspondem. Isso identifica problemas de codificação, perda de precisão de números de ponto flutuante e problemas de índice antes que o arquivo chegue ao consumidor seguinte.
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df.to_csv('/tmp/check.csv', index=False)
df_check = pd.read_csv('/tmp/check.csv')
assert df_check.shape == df.shape, 'Row/column count mismatch'
assert list(df_check.columns) == list(df.columns)
print('Export verified OK')Parquet: uma alternativa melhor para dados
Para grandes conjuntos de dados analíticos, considere o formato Parquet em vez de CSV. O Parquet armazena os dados em formato colunar, oferece suporte à compactação, preserva os tipos de dados exatamente e faz a leitura de 10 a 100 vezes mais rápido em consultas analíticas. Grave com df.to_parquet('data.parquet') e leia com pd.read_parquet('data.parquet'). É necessário ter pyarrow ou fastparquet instalado.
import pandas as pd
df = pd.DataFrame({'a': range(1000000), 'b': range(1000000)})
df.to_parquet('data.parquet', index=False)
df2 = pd.read_parquet('data.parquet')
print(df2.dtypes) # dtypes preserved exactlyVerificação rápida
Teste sua compreensão sobre como gravar DataFrames em arquivos com base nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu que: to_csv() e to_excel() exportam DataFrames e ambos incluem o índice por padrão — sempre defina index=False para obter uma saída limpa, ExcelWriter permite gravar vários DataFrames em planilhas separadas de uma única pasta de trabalho e Parquet é uma alternativa mais rápida e eficiente em espaço do que CSV para grandes conjuntos de dados analíticos. Em seguida, carregaremos arquivos CSV remotos a partir de URLs e analisaremos strings CSV na memória com io.StringIO.
Perguntas Frequentes
A aula “Escrevendo DataFrames em arquivos” é grátis?
Sim — o texto completo de “Escrevendo DataFrames em arquivos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que vou aprender em “Escrevendo DataFrames em arquivos”?
Exporte um DataFrame limpo para CSV e Excel com to_csv e to_excel, controlando o índice e o formato de números de ponto flutuante. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Pandas & NumPy Academy?
Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Escrevendo DataFrames em arquivos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Pandas & NumPy Academy?
Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Lendo arquivos CSV
- Lendo arquivos Excel e JSON
- Escrevendo DataFrames em arquivos
- Lendo de URLs e StringIO