curso
Como salvar um DataFrame do Pandas em CSV
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:
Aprenda sobre Pandas com estes cursos!
curso
Reshaping Data with pandas
curso
Writing Efficient Code with pandas
tutorial
Pandas Tutorial: DataFrames em Python
tutorial
Tutorial pandas read csv(): Importação de dados
tutorial
Tutorial de seleção de colunas em Python

DataCamp Team
7 min
tutorial
Tutorial de junção de DataFrames no pandas

DataCamp Team
19 min
tutorial