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.
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 )
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
>>>
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
Vous pouvez directement supprimer la colonne avec juste
del variable_name['year']
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))
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()
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]
Essayer:
result= data.drop('year', 1)
result.head(5)