web-dev-qa-db-fra.com

Écriture de données Panda dans un fichier csv en morceaux

J'ai un ensemble de gros fichiers de données (1M lignes x 20 cols). Cependant, seulement environ 5 colonnes de ces données m'intéressent.

Je pense que je peux me faciliter les choses en créant des copies de ces fichiers avec uniquement les colonnes d'intérêt, j'ai donc de plus petits fichiers à utiliser pour le post-traitement.

Mon plan était de lire le fichier dans une trame de données, puis d'écrire dans un fichier csv.

J'ai cherché à lire de gros fichiers de données en morceaux dans une trame de données.

Cependant, je n'ai rien trouvé sur la façon d'écrire les données dans un fichier csv en morceaux.

Voici ce que j'essaie maintenant, mais cela n'ajoute pas le fichier csv:

with open(os.path.join(folder, filename), 'r') as src:
    df = pd.read_csv(src, sep='\t',skiprows=(0,1,2),header=(0), chunksize=1000)
    for chunk in df:
        chunk.to_csv(os.path.join(folder, new_folder,
                                  "new_file_" + filename), 
                                  columns = [['TIME','STUFF']])
13

Essayer:

chunk.to_csv(os.path.join(folder, new_folder, "new_file_" + filename), cols = [['TIME','STUFF']], mode='a')

Le mode='a' indique pandas à ajouter.

12
Scratch'N'Purr

Découvrez l'argument chunksize dans le to_csv méthode. Ici sont les documents.

L'écriture dans un fichier ressemblerait à ceci:

df.to_csv("path/to/save/file.csv", chunksize=1000, cols=['TIME','STUFF'])
13
Alex

Pourquoi ne lisez-vous pas seulement les colonnes qui vous intéressent, puis enregistrez-les?

file_in = os.path.join(folder, filename)
file_out = os.path.join(folder, new_folder, 'new_file' + filename)

df = pd.read_csv(file_in, sep='\t', skiprows=(0, 1, 2), header=0, names=['TIME', 'STUFF'])
df.to_csv(file_out)
1
Alexander