131 votes

Comment ignorer la première ligne de données lors du traitement de données CSV ?

Je demande à Python d'imprimer le nombre minimum d'une colonne de données CSV, mais la première ligne est le numéro de la colonne, et je ne veux pas que Python prenne en compte la première ligne. Comment puis-je faire en sorte que Python ignore la première ligne ?

Voici le code jusqu'à présent :

import csv

with open('all16.csv', 'rb') as inf:
    incsv = csv.reader(inf)
    column = 1                
    datatype = float          
    data = (datatype(column) for row in incsv)   
    least_value = min(data)

print least_value

Pourriez-vous également expliquer ce que vous faites, et pas seulement donner le code ? Je suis très novice en Python et je voudrais être sûr de tout comprendre.

8voto

1_CR Points 11848

Utiliser csv.DictReader au lieu de csv.Reader. Si le paramètre fieldnames est omis, les valeurs de la première ligne du fichier csv seront utilisées comme noms de champs. Vous pourrez alors accéder aux valeurs des champs en utilisant row["1"], etc.

7voto

Wooble Points 35620

Appelez simplement incsv.next() après avoir créé l'objet lecteur pour sauter la première ligne.

4voto

Patel Romil Points 4264

Python 2.x

csvreader.next()

Retourne la ligne suivante de l'objet itérable du lecteur sous la forme d'une liste, analysée. selon le dialecte actuel.

csv_data = csv.reader(open('sample.csv'))
csv_data.next() # skip first row
for row in csv_data:
    print(row) # should print second row

Python 3.x

csvreader.__next__()

Renvoie la ligne suivante de l'objet itérable du lecteur sous la forme d'une liste (si l'option a été retourné par reader()) ou un dict (si c'est une instance de DictReader ), analysé selon le dialecte actuel. En général, vous devriez appeler ceci comme next(reader).

csv_data = csv.reader(open('sample.csv'))
csv_data.__next__() # skip first row
for row in csv_data:
    print(row) # should print second row

3voto

Lassi Points 531

El documentation pour le module CSV de Python 3 fournit cet exemple :

with open('example.csv', newline='') as csvfile:
    dialect = csv.Sniffer().sniff(csvfile.read(1024))
    csvfile.seek(0)
    reader = csv.reader(csvfile, dialect)
    # ... process CSV file contents here ...

El Sniffer va essayer de détecter automatiquement de nombreux éléments du fichier CSV. Vous devez appeler explicitement son has_header() pour déterminer si le fichier possède une ligne d'en-tête. Si c'est le cas, il faut sauter la première ligne lors de l'itération des lignes du CSV. Vous pouvez le faire comme suit :

if sniffer.has_header():
    for header_row in reader:
        break
for data_row in reader:
    # do something with the row

3voto

Il s'agit peut-être d'une question très ancienne, mais avec les pandas, nous avons une solution très simple.

import pandas as pd

data=pd.read_csv('all16.csv',skiprows=1)
data['column'].min()

avec skiprows=1, nous pouvons sauter la première ligne et trouver la plus petite valeur en utilisant data['column'].min()

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