web-dev-qa-db-fra.com

Pandas DataFrame.to_csv levant IOError: Aucun fichier ou répertoire de ce type

Bonjour: J'essaie d'utiliser le PandasDataFrame.to_csv méthode pour enregistrer un dataframe dans un fichier csv:

filename = './dir/name.csv'

df.to_csv(filename)

Cependant je reçois l'erreur:

IOError: [Errno 2] No such file or directory: './dir/name.csv'

Le to_csv la méthode peut-elle créer le fichier s’il n’existe pas? C’est ce que j’ai l’intention de faire.

20
LoLa

to_csv crée le fichier s'il n'existe pas comme vous l'avez dit, mais ne crée pas de répertoires qui n'existent pas. Assurez-vous que le sous-répertoire dans lequel vous essayez de sauvegarder votre fichier a été créé en premier.

Je fais souvent quelque chose comme ça dans mon travail:

import os

outname = 'name.csv'

outdir = './dir'
if not os.path.exists(outdir):
    os.mkdir(outdir)

fullname = os.path.join(outdir, outname)    

df.to_csv(fullname)

Cela peut facilement être intégré à une fonction si vous devez le faire fréquemment.

29
qRTPCR

Voici une autre façon de faire cela en utilisant l'excellente bibliothèque standard pathlib module, qui rend généralement les choses plus ordonnées.

Comme expliqué ailleurs, to_csv créera le fichier s'il n'existe pas, mais ne le fera pas créer les répertoires inexistants dans le chemin d'accès au fichier, vous devez donc d'abord vous assurer qu'ils existent.

from pathlib import Path

output_file = 'my_file.csv'
output_dir = Path('long_path/to/my_dir')

output_dir.mkdir(parents=True, exist_ok=True)

df.to_csv(output_dir / output_file)  # can join path elements with / operator

Réglage parents=True créera également tous les répertoires parents nécessaires et exist_ok=True _ signifie que cela ne générera pas d'erreur si le répertoire existe déjà, vous n'avez donc pas à le vérifier explicitement séparément.

11
Tim