Pular para o conteúdo principal

Como salvar um DataFrame do Pandas em CSV

No Pandas, você pode salvar um DataFrame em um arquivo CSV usando o método df.to_csv('your_file_name.csv', index=False), em que df é o seu DataFrame e index=False impede que uma coluna de índice seja adicionada.
Actualizado 30 de jul. de 2024  · 7 min de leitura

Se você criar um DataFrame ou modificar um existente, talvez queira exportá-lo para que outras pessoas possam trabalhar com ele ou salvá-lo para trabalhos futuros. Por exemplo, você pode ter que enviar uma previsão de um projeto de machine learning para o seu examinador ou enviar um conjunto de dados modificado para um colega de trabalho.

Em Python, você pode exportar um DataFrame como um arquivo CSV usando o método .to_csv() do Pandas .

Neste artigo, mostrarei a você as principais etapas do processo e explicarei os parâmetros do método.

Se você quiser saber mais sobre o Pandas, confira este curso sobre Manipulação de dados com Pandas.

Começarei com uma resposta rápida para vocês que estão com pressa e depois entrarei em detalhes.

Resposta curta: Como salvar o DataFrame do Pandas em CSV

Para salvar um DataFrame do Pandas como um CSV, use o método DataFrame.to_csv()

df.to_csv('your_file_name.csv', index=False)

Substitua 'your_file_name.csv' pelo nome e caminho desejados para o seu arquivo. O argumento index=False impede que o Pandas adicione uma coluna de índice ao seu CSV.

Criando um DataFrame do Pandas

Agora, vamos dar uma olhada na resposta mais longa. Em vez de criar um DataFrame do zero, importarei um conjunto de dados, modificá-lo-ei e salvarei o DataFrame resultante no formato CSV. A primeira etapa é importar as bibliotecas necessárias:

import pandas as pd
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler

Em seguida, podemos importar um conjunto de dados seaborn. O conjunto de dados importado já é um DataFrame do Pandas, portanto, você não precisa transformá-lo.

# We’ll import the 'titanic' dataset from seaborn
df = sns.load_dataset('titanic')
print(df.head())
survived  pclass     sex   age  sibsp  parch     fare embarked  class  
0         0       3    male  22.0      1      0   7.2500        S  Third   
1         1       1  female  38.0      1      0  71.2833        C  First   
2         1       3  female  26.0      0      0   7.9250        S  Third   
3         1       1  female  35.0      1      0  53.1000        S  First   
4         0       3    male  35.0      0      0   8.0500        S  Third 
    who  adult_male deck  embark_town alive  alone  
0    man        True  NaN  Southampton    no  False  
1  woman       False    C    Cherbourg   yes  False  
2  woman       False  NaN  Southampton   yes   True  
3  woman       False    C  Southampton   yes  False  
4    man        True  NaN  Southampton    no   True  

Modificando um DataFrame do Pandas

Agora, vamos fazer algum processamento para que você obtenha um novo DataFrame. Como o meu objetivo é explorar ométodo .to_csv() do Pandas, farei apenas uma normalização min-max em variáveis numéricas.

scaler = MinMaxScaler()
# Choose the columns that have integer or float data-types                                           
numerical columns - df.select_dtypes(include=['float64','int64']).columns
new_df = df.copy()
# The min-max scaler will represent all numbers on a 0-to-1 scale
new_df[numerical_columns] = scaler.fit_transform(df[numerical_columns])
print(new_df.head())
survived  pclass     sex       age  sibsp  parch      fare embarked    
0       0.0     1.0    male  0.271174  0.125    0.0  0.014151        S  
1       1.0     0.0  female  0.472229  0.125    0.0  0.139136        C  
2       1.0     1.0  female  0.321438  0.000    0.0  0.015469        S  
3       1.0     0.0  female  0.434531  0.125    0.0  0.103644        S  
4       0.0     1.0    male  0.434531  0.000    0.0  0.015713        S  
class   who  adult_male deck  embark_town alive  alone  
Third   man        True  NaN  Southampton    no  False  
First   woman      False   C    Cherbourg   yes  False  
Third   woman      False NaN  Southampton   yes   True  
First   woman      False   C  Southampton   yes  False  
Third   man        True  NaN  Southampton    no   True  

Salvando um DataFrame do Pandas como CSV

Usaremos o método DataFrame.to_csv() para salvar o DataFrame modificado como um arquivo CSV.

new_df.to_csv('new_titanic.csv') 

Isso salvará o arquivo CSV no diretório atual. Se você precisar de uma atualização, leia este tutorial sobre como obter o diretório atual em Python.

A forma como chamei esse método garantiu que todos os parâmetros fossem definidos com seus valores padrão. Agora, apresentarei os parâmetros e como você pode alterar seus valores de acordo com suas necessidades.

Parâmetros de DataFrame.to_csv() Explicação

Aqui está o mesmo método .to_csv() listado com todos os parâmetros:

new_df.to_csv(
    path_or_buf='new_titanic.csv',
    sep=',',
    na_rep='',
    float_format=None,
    columns=[],
    header=True,
    index=True,
    index_label=None,
    mode='w',
    encoding='utf-8',
    quoting=csv.QUOTE_MINIMAL,
    lineterminator=os.linesep,
    storage_options={},
    compression='infer',
    quotechar='',
    chunksize=None,
    date_format=None,
    doublequote=True,
    escapechar=None,
    decimal='.',
    errors='strict'
)

Alguns desses parâmetros são opcionais, como columns, encoding, quoting, lineterminator e storage_options, portanto, eu apenas defino valores para eles, não necessariamente valores padrão.

O primeiro parâmetro pode ser uma cadeia de caracteres, que será o nome do arquivo, ou um objeto de arquivo. Veja este exemplo:

with open('new_titanic.csv',  'w', encoding = 'utf=8') as file:
     new_df.to_csv(file)

Separadores e valores ausentes

O próximo parâmetro é o separador, que se refere à forma como os dados são separados. O separador padrão é a vírgula, mas você pode alterá-lo para uma tabulação ou ponto e vírgula. Um separador de tabulação ou ponto e vírgula pode ser útil quando os dados exportados precisam estar em um determinado formato. Além disso, no caso de dados que contenham vírgulas, como textos, o uso da vírgula como separador pode causar alterações indesejadas.

Por exemplo, se você tiver 'Hello, world 'como um ponto de dados, se quiser usar o separador de vírgula, também precisará de aspas para mantê-lo como um único ponto de dados. Usar um separador de tabulação ou ponto e vírgula pode ser a melhor opção, pois pode consumir menos memória do que usar vírgulas e aspas.

new_df.to_csv('new_titanic.csv', sep = '\t')
new_df_tab = pd.read_csv('new_titanic.csv')
0\t0\t3\tmale\t22.0\t1\t0\t7.25\tS\tThird\tman...                                                                 
1\t1\t1\tfemale\t38.0\t1\t0\t71.2833\tC\tFirst...                                                                 
2\t1\t3\tfemale\t26.0\t0\t0\t7.925\tS\tThird\t...                                                                 
3\t1\t1\tfemale\t35.0\t1\t0\t53.1\tS\tFirst\tw...                                                                 
4\t0\t3\tmale\t35.0\t0\t0\t8.05\tS\tThird\tman... 

O terceiro parâmetro, na_rep, refere-se à representação dos valores ausentes. As opções comuns seriam deixar a célula vazia para inserir ‘NaN’ ou ‘Na’, mas você também pode inserir sua cadeia de caracteres personalizada. Vou inserir ‘Datacamp’ no exemplo a seguir para cada valor ausente.

new_df.to_csv('new_titanic.csv', na_rep='Datacamp')
new_df_datacamp = pd.read_csv('new_titanic.csv') 
new_df_datacamp = pd.DataFrame(new_df_datacamp) 
#find the missing values
missing_values = new_df_datacamp.isnull().sum()
print(missing_values)
survived         0
pclass           0
sex              0
age            177
sibsp            0
parch            0
fare             0
embarked         2
class            0
who              0
adult_male       0
deck           688
embark_town      2
alive            0
alone            0

Manipulação de colunas e índices

Vamos ver como os valores ausentes são representados na coluna age:

print(new_df_datacamp['age'][:10])
     0.2711736617240512
     0.4722292033174164
    0.32143754712239253
     0.4345312892686604
     0.4345312892686604
               Datacamp
     0.6732847449107816
    0.01985423473234481
    0.33400351847197784
    0.17064589092736868

Se você quiser menos casas decimais, use o parâmetro float_format para especificar o número de casas decimais. Aqui, usaremos apenas três.

new_df.to_csv('new_titanic.csv', na_rep='Datacamp', float_format='%.3f')
new_df_datacamp = pd.read_csv('new_titanic.csv')
new_df_datacamp = pd.DataFrame(new_df_datacamp)
print(new_df_datacamp['age'][:10])
0.271
0.472
0.321
0.435
0.435
Datacamp
0.673
0.020
0.334
0.171

Se você não quiser você não quiser ver o índice, defina o parâmetro index como False.

Você também pode decidir se deseja manter os nomes das colunas, usando o parâmetro header e definindo-o como True ou False, que é o caminho a seguir (ou você pode definir os nomes das colunas).

O parâmetro columns permite que você selecione as colunas a serem mantidas. O parâmetro index_label permite que você defina um nome para o índice da coluna ou uma lista de nomes se você tiver vários índices.

new_df.to_csv(
    'new_titanic.csv', 
    index=True, 
    header=True, 
    columns=['age', 'alive'], 
    index_label='Index'
)
new_df = pd.read_csv('new_titanic.csv')
new_df = pd.DataFrame(new_df)
print(new_df.head())
  Index       age alive
      0  0.271174    no
      1  0.472229   yes
      2  0.321438   yes
      3  0.434531   yes
      4  0.434531    no

Abertura, codificação e compactação de arquivos

O parâmetro mode permite que você decida o que fazer quando já tiver um arquivo CSV com o mesmo nome do arquivo que você criou. Se você definir o parâmetro como ‘w’ e já tiver um arquivo new_titanic.csv , o arquivo que você criar substituirá o antigo. Se você defini-la como ‘x’, o novo arquivo será criado somente se não houver nenhum arquivo existente com o mesmo nome. Por fim, se você definir o parâmetro como ‘a’, ele anexará o novo arquivo ao antigo com o mesmo nome (talvez você queira apenas adicionar algumas linhas).

O parâmetro encoding define a codificação do novo arquivo. Se os seus dados contiverem caracteres especiais, como letras de outros alfabetos, você poderá defini-los como ‘utf-8’ ou outra codificação.

O parâmetro compression define a forma como o novo arquivo é compactado. Por padrão, ele é definido como ‘infer’, o que significa que ele comprime o arquivo de acordo com a extensão especificada, mas você também pode especificar sua extensão preferida.

# Infer the compression
new_df.to_csv('new_titanic.csv.gz')
# Specify the compression explicitly
new_df.to_csv('new_data.csv.gz', compression='gzip')
# Specify the compression via a dictionary
new_df.to_csv(
    'new_data.zip', 
    compression={
        'method': 'zip', 
        'archive_name': 'data.csv'
    }
)

Como usar a cotação

O parâmetro quoting define o tipo de dados a serem colocados entre aspas. Como eu disse anteriormente, quando você tem um separador de vírgula e também células que contêm vírgulas (como textos), é preciso decidir o que colocar entre aspas.

# Default value, quotes only fields with special characters or separators like tabs and commas
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_MINIMAL)
# Quotes all fields
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_ALL)
# Quotes only fields with non-numeric values
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONNUMERIC)
# No field is quoted
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONE)

Tamanho dos pedaços e dados de data e hora

O parâmetro chunksize especifica quanto do seu arquivo será gravado de uma só vez. Ao deixar o valor padrão, todas as linhas são gravadas de uma vez, mas você pode especificar um número, o que pode ser útil quando o arquivo é muito grande.

O parâmetro date_format define a representação dos objetos de data e hora. Você pode especificá-lo usando oformato strftime .

# Write DataFrame to CSV with dates formatted as 'MM/DD/YYYY'
new_df.to_csv('new_titanic.csv', date_format='%m/%d/%Y')
# You can set datetime objects up to seconds
new_df.to_csv('new_titanic.csv', date_format='%Y-%m-%d %H:%M:%S')

Conclusão

Esperamos que agora você esteja pronto para exportar seu DataFrame no formato que atenda às suas necessidades!

Eu o incentivo a continuar aprendendo - aqui estão alguns recursos que você pode experimentar:

Temas

Aprenda sobre Pandas com estes cursos!

curso

Data Manipulation with pandas

4 hr
428.1K
Learn how to import and clean data, calculate statistics, and create visualizations with pandas.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

tutorial

Pandas Tutorial: DataFrames em Python

Explore a análise de dados com Python. Os DataFrames do Pandas facilitam a manipulação de seus dados, desde a seleção ou substituição de colunas e índices até a remodelagem dos dados.
Karlijn Willems's photo

Karlijn Willems

20 min

tutorial

Tutorial pandas read csv(): Importação de dados

A importação de dados é a primeira etapa de qualquer projeto de ciência de dados. Saiba por que os cientistas de dados atuais preferem a função read_csv() do pandas para fazer isso.
Kurtis Pykes 's photo

Kurtis Pykes

9 min

tutorial

Tutorial de seleção de colunas em Python

Use o Python Pandas e selecione colunas de DataFrames. Siga nosso tutorial com exemplos de código e aprenda diferentes maneiras de selecionar seus dados hoje mesmo!
DataCamp Team's photo

DataCamp Team

7 min

tutorial

Tutorial de junção de DataFrames no pandas

Neste tutorial, você aprenderá várias maneiras pelas quais vários DataFrames podem ser mesclados em python usando a biblioteca Pandas.
DataCamp Team's photo

DataCamp Team

19 min

tutorial

Tutorial do Python Excel: O guia definitivo

Saiba como ler e importar arquivos do Excel em Python, gravar dados nessas planilhas e encontrar os melhores pacotes para fazer isso.
Natassha Selvaraj's photo

Natassha Selvaraj

30 min

Ver maisVer mais