cours
Comment enregistrer un DataFrame Pandas au format CSV ?
Si vous créez un DataFrame ou modifiez un DataFrame existant, vous pouvez l'exporter pour que d'autres personnes puissent travailler avec, ou vous pouvez le sauvegarder pour vos travaux futurs. Par exemple, vous pouvez être amené à soumettre à votre examinateur une prédiction issue d'un projet d'apprentissage automatique ou à envoyer un ensemble de données modifié à un collègue.
En Python, vous pouvez exporter un DataFrame sous forme de fichier CSV à l'aide de la méthode .to_csv()
de Pandas.
Dans cet article, je vous guiderai à travers les principales étapes du processus et vous expliquerai les paramètres de la méthode.
Si vous souhaitez en savoir plus sur Pandas, consultez ce cours sur Manipulation de données avec Pandas.
Je commencerai par une réponse rapide pour ceux d'entre vous qui sont pressés, puis j'entrerai dans les détails.
Réponse courte : Comment enregistrer un DataFrame Pandas au format CSV ?
Pour enregistrer un DataFrame Pandas au format CSV, utilisez la méthode DataFrame.to_csv()
:
df.to_csv('your_file_name.csv', index=False)
Remplacez 'your_file_name.csv'
par le nom et le chemin d'accès souhaités pour votre fichier. L'argument index=False
empêche Pandas d'ajouter une colonne d'index à votre CSV.
Création d'un DataFrame Pandas
Voyons maintenant la réponse plus longue. Au lieu de créer un DataFrame à partir de zéro, je vais importer un ensemble de données, le modifier et enregistrer le DataFrame résultant au format CSV. La première étape consiste à importer les bibliothèques nécessaires :
import pandas as pd
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
Ensuite, nous pouvons importer un jeu de données seaborn
. Le jeu de données importé est déjà un DataFrame Pandas, nous n'avons donc pas besoin de le transformer.
# 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
Modifier un DataFrame Pandas
Effectuons maintenant quelques traitements pour obtenir un nouveau DataFrame. Comme mon but est d'explorer laméthode .to_csv()
de Pandas, je ne ferai qu'une normalisation min-max sur les variables numériques.
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
Enregistrer un DataFrame Pandas au format CSV
Nous utiliserons la méthode DataFrame.to_csv()
pour enregistrer le DataFrame modifié dans un fichier CSV.
new_df.to_csv('new_titanic.csv')
Cette opération permet d'enregistrer le fichier CSV dans le répertoire actuel. Si vous avez besoin d'un rappel, lisez ce tutoriel sur comment obtenir le répertoire courant en Python.
La façon dont j'ai appelé cette méthode a permis de s'assurer que tous les paramètres étaient réglés sur leurs valeurs par défaut. Je vais maintenant vous présenter les paramètres et la manière dont vous pouvez modifier leurs valeurs en fonction de vos besoins.
Paramètres de DataFrame.to_csv()
Expliqué
Voici la même méthode .to_csv()
avec tous les paramètres :
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'
)
Certains de ces paramètres sont facultatifs, comme columns
, encoding
, quoting
, lineterminator
et storage_options
, et je me contente donc de leur attribuer des valeurs, qui ne sont pas nécessairement des valeurs par défaut.
Le premier paramètre peut être soit une chaîne de caractères, qui sera le nom du fichier, soit un objet fichier. Regardez cet exemple :
with open('new_titanic.csv', 'w', encoding = 'utf=8') as file:
new_df.to_csv(file)
Séparateurs et valeurs manquantes
Le paramètre suivant est le séparateur, qui indique comment les données sont séparées. Le séparateur par défaut est la virgule, mais nous pouvons le remplacer par une tabulation ou un point-virgule. Un séparateur de tabulation ou de point-virgule peut s'avérer utile lorsque les données exportées doivent être présentées dans un certain format. En outre, pour les données qui contiennent des virgules, comme les textes, l'utilisation de la virgule comme séparateur peut entraîner des changements indésirables.
Par exemple, si vous avez "Hello, world "comme point de données, si vous voulez utiliser le séparateur de virgules, vous avez également besoin de guillemets pour que le point de données reste unique. L'utilisation d'une tabulation ou d'un point-virgule comme séparateur peut s'avérer une meilleure option, car elle nécessite moins de mémoire que l'utilisation de virgules et de guillemets.
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...
Le troisième paramètre, na_rep
, fait référence à la représentation des valeurs manquantes. Les choix les plus courants consistent à laisser la cellule vide pour insérer ‘NaN’
ou ‘Na’
, mais vous pouvez également insérer votre chaîne de caractères personnalisée. Dans l'exemple suivant, j'insérerai ‘Datacamp’
pour chaque valeur manquante.
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
Gestion des colonnes et des index
Voyons comment les valeurs manquantes sont représentées pour la colonne 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
Si vous souhaitez moins de décimales, utilisez le paramètre float_format
pour spécifier le nombre de décimales. Ici, nous n'en utiliserons que trois.
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
Si vous ne voulez pas voir l'index, définissez le paramètre index
sur False
.
Vous pouvez également décider de conserver les noms des colonnes, en utilisant le paramètre header
et en le définissant sur True
ou False
, ce qui est la meilleure solution (ou vous pouvez définir les noms des colonnes).
Le paramètre columns
vous permet de sélectionner les colonnes à conserver. Le paramètre index_label
vous permet de définir un nom pour l'index de la colonne ou une liste de noms si vous avez plusieurs index.
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
Ouverture, encodage et compression de fichiers
Le paramètre mode
vous permet de décider ce qu'il convient de faire lorsque vous disposez déjà d'un fichier CSV portant le même nom que celui que vous avez créé. Si vous définissez le paramètre sur ‘w’
et que vous disposez déjà d'un fichier new_titanic.csv
, le fichier que vous créez remplacera l'ancien. Si vous le réglez sur ‘x’
, le nouveau fichier n'est créé que s'il n'existe pas de fichier portant le même nom. Enfin, si vous définissez le paramètre à ‘a’
, le nouveau fichier sera ajouté à l'ancien fichier portant le même nom (peut-être voulez-vous simplement ajouter quelques lignes).
Le paramètre encoding définit l'encodage du nouveau fichier. Si vos données contiennent des caractères spéciaux, tels que des lettres d'autres alphabets, vous pouvez les définir sur ‘utf-8’
ou un autre encodage.
Le paramètre compression
définit le mode de compression du nouveau fichier. Par défaut, il est réglé sur ‘infer’
, ce qui signifie qu'il compresse le fichier en fonction de l'extension spécifiée, mais vous pouvez également spécifier votre extension préférée.
# 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'
}
)
Comment utiliser les citations
Le paramètre quoting
définit le type de données à mettre entre guillemets. Comme je l'ai dit précédemment, lorsque vous avez un séparateur de virgules et des cellules contenant des virgules (comme des textes), vous devez décider ce qu'il faut mettre entre guillemets.
# 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)
Données sur la taille des morceaux et la date et l'heure
Le paramètre chunksize
indique la quantité de votre fichier qui sera écrite en une seule fois. En laissant la valeur par défaut, toutes les lignes sont écrites en même temps, mais vous pouvez spécifier un nombre, ce qui peut être utile lorsque le fichier est très grand.
Le paramètre date_format
définit la représentation des objets de type datetime. Vous pouvez le spécifier en utilisant leformat 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')
Conclusion
Nous espérons que vous êtes maintenant prêt à exporter votre DataFrame dans le format qui vous convient !
Je vous encourage à continuer à apprendre - voici quelques ressources que vous pouvez essayer :
Je termine mon master en science des données à l'université de Bucarest, en Roumanie, avec une thèse sur la prédiction des flux de trafic à l'aide de divers modèles basés sur les réseaux neuronaux graphiques. Les principales compétences que j'ai acquises sont le nettoyage et la visualisation des données en Python et Power BI, le prétraitement pour diverses tâches d'apprentissage automatique et la construction de modèles avec PyTorch (ou TensorFlow). Parallèlement, en tant que doctorant en philosophie, j'enseigne des séminaires sur la logique du premier ordre tout en travaillant sur ma thèse sur la théorie de la confirmation bayésienne. Je suis impatient d'en apprendre davantage sur les données et la construction de modèles et d'enseigner ce que j'apprendrai.
Apprenez les Pandas avec ces cours !
cours
Remodeler les données avec pandas
cours