web-dev-qa-db-fra.com

Comment supprimer des colonnes dans un fichier CSV?

J'ai pu créer un csv avec python en utilisant les entrées de plusieurs utilisateurs sur ce site et je souhaite exprimer ma gratitude pour vos messages. Je suis maintenant perplexe et je vais poster 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 entrées avec une gamme d'années de 1960 à 2010.

25
Jeff
import csv
with open("source","rb") as source:
    rdr= csv.reader( source )
    with open("result","wb") as result:
        wtr= csv.writer( result )
        for r in rdr:
            wtr.writerow( (r[0], r[1], r[3], r[4]) )

BTW, la boucle for peut être supprimée, mais pas vraiment simplifiée.

        in_iter= ( (r[0], r[1], r[3], r[4]) for r in rdr )
        wtr.writerows( in_iter )

En outre, vous pouvez vous en tenir de manière hyper-littérale aux exigences pour supprimer une colonne. Je trouve que c'est une mauvaise politique en général, car elle ne s'applique pas à la suppression de plusieurs colonnes. Lorsque vous essayez de supprimer la seconde, vous découvrez que les positions ont toutes changé et que la ligne résultante n'est pas évidente. Mais pour une seule colonne, cela fonctionne.

            del r[2]
            wtr.writerow( r )
42
S.Lott

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 courte 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
>>>
25
SunilThorat

En utilisant un dict pour saisir les titres puis en boucle, vous obtenez 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
7
Aimon Bustardo

Vous pouvez directement supprimer la colonne avec juste

del variable_name['year']
1
ankur

vous pouvez utiliser le package csv pour parcourir le fichier csv et exporter les colonnes souhaitées vers 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))
1
aweis

Du haut de ma tête, cela le fera sans aucune sorte de vérification d'erreur ni possibilité 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()
1
broc

Cela dépend de la façon dont vous stockez le CSV analysé, mais vous voulez généralement l'opérateur del.

Si vous avez un tableau de dict:

input = [ {'day':01, 'month':04, 'year':2001, ...}, ... ]
for E in input: del E['year']

Si vous avez un tableau de tableaux:

input = [ [01, 04, 2001, ...],
          [...],
          ...
        ]
for E in input: del E[2]
0
KQ.

Essayer:

result= data.drop('year', 1)
result.head(5)
0
AlfhaOmega