Suppression de colonnes dans un CSV avec python

j'ai été capable de créer un csv avec python en utilisant les entrées de plusieurs utilisateurs sur ce site et je tiens à exprimer ma gratitude pour vos messages. Maintenant je suis perplexe et le poster à ma première question.

ma contribution.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 fourchette d'années allant de 1960 à 2010.

20
demandé sur Sam 2011-09-29 00:04:06

7 réponses

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, the for boucle peut être supprimé, mais pas vraiment simplifié.

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

vous pouvez aussi coller de façon hyper-littérale aux exigences pour supprimer une colonne. Pour moi c'est une mauvaise politique en général, car il ne s'applique pas à retirer plus que sur la colonne. Lorsque vous essayez de supprimer la seconde, vous découvrez que les postes ont tous changé et la ligne n'est pas évidente. Mais pour une colonne seulement, ça marche.

            del r[2]
            wtr.writerow( r )
35
répondu S.Lott 2011-09-29 02:13:35

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 petite 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
>>>
15
répondu SunilT 2015-12-24 16:49:20

en utilisant un DCT pour saisir des titres puis en faisant une 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
répondu Aimon Bustardo 2012-11-16 05:50:43

vous pouvez utiliser le csv paquet pour itérer sur votre fichier csv et la sortie des colonnes que vous voulez à un autre fichier csv.

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
répondu aweis 2011-09-28 20:11:51

hors de ma tête, cela le fera sans aucune sorte de vérification d'erreur ni 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()
1
répondu broc 2011-09-28 20:13:24

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

Si vous avez un tableau des dicts:

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
répondu KQ. 2011-09-28 20:10:37

Vous pouvez supprimer directement la colonne avec juste

del variable_name['year']
0
répondu ankur 2016-03-28 13:17:13