Accéder au contenu principal

Comment enregistrer un DataFrame Pandas au format CSV ?

Dans Pandas, vous pouvez enregistrer un DataFrame dans un fichier CSV en utilisant la méthode df.to_csv('votre_nom_de_fichier.csv', index=False), où df est votre DataFrame et index=False empêche l'ajout d'une colonne d'index.
Actualisé 14 nov. 2024  · 7 min de lecture

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 :


Photo of Tudor Mărginean
Author
Tudor Mărginean

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.

Sujets

Apprenez les Pandas avec ces cours !

Certification disponible

cours

Manipulation de données avec pandas

4 hr
383.7K
Apprenez à importer et à nettoyer des données, à calculer des statistiques et à créer des visualisations avec pandas.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow