48 votes

Comment supprimer des colonnes dans un fichier CSV ?

J'ai été en mesure de créer un csv avec python en utilisant les commentaires de plusieurs utilisateurs sur ce site et je tiens à exprimer ma gratitude pour vos messages. Je suis maintenant stupéfait et je vais poser ma première question.

Mon input.csv ressemble à ceci :

day,month,year,lat,long
01,04,2001,45.00,120.00
02,04,2003,44.00,118.00

J'essaie de supprimer la colonne « année » et toutes ses entrées. Au total, il y a plus de 40 inscriptions pour un intervalle d'années allant de 1960 à 2010.

52voto

SunilT Points 687

L'utilisation du module Pandas sera beaucoup plus facile.

import pandas as pd
f=pd.read_csv("test.csv")
keep_col = ['day','month','lat','long']
new_f = f[keep_col]
new_f.to_csv("newFile.csv", index=False)

Et voici une brève explication :

>>>f=pd.read_csv("test.csv")
>>> f
   day  month  year  lat  long
0    1      4  2001   45   120
1    2      4  2003   44   118
>>> keep_col = ['day','month','lat','long'] 
>>> f[keep_col]
    day  month  lat  long
0    1      4   45   120
1    2      4   44   118
>>>

6voto

Aimon Bustardo Points 158

L'utilisation d'un dict pour saisir les en-têtes puis les boucler vous permet d'obtenir ce dont vous avez besoin proprement.

import csv
ct = 0
cols_i_want = {'cost' : -1, 'date' : -1}
with open("file1.csv","rb") as source:
    rdr = csv.reader( source )
    with open("result","wb") as result:
        wtr = csv.writer( result )
        for row in rdr:
            if ct == 0:
              cc = 0
              for col in row:
                for ciw in cols_i_want: 
                  if col == ciw:
                    cols_i_want[ciw] = cc
                cc += 1
            wtr.writerow( (row[cols_i_want['cost']], row[cols_i_want['date']]) )
            ct += 1

2voto

aweis Points 1849

vous pouvez utiliser le paquet csv pour itérer sur votre fichier csv et sortir les colonnes que vous voulez dans un autre fichier csv.

L'exemple ci-dessous n'est pas testé et devrait illustrer une solution :

import csv

file_name = 'C:\Temp\my_file.csv'
output_file = 'C:\Temp\new_file.csv'
csv_file = open(file_name, 'r')
## note that the index of the year column is excluded
column_indices = [0,1,3,4]
with open(output_file, 'w') as fh:
    reader = csv.reader(csv_file, delimiter=',')
    for row in reader:
       tmp_row = []
       for col_inx in column_indices:
           tmp_row.append(row[col_inx])
       fh.write(','.join(tmp_row))

2voto

broc Points 214

Hors de ma tête, cela le fera sans aucune sorte de vérification d'erreur ou la capacité de configurer quoi que ce soit. C'est « laissé au lecteur ».

outFile = open( 'newFile', 'w' )
for line in open( 'oldFile' ):
   items = line.split( ',' )
   outFile.write( ','.join( items[:2] + items[ 3: ] ) )
outFile.close()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X