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.

2voto

Le nouveau paquet "pandas" pourrait être plus pertinent que "csv". Le code ci-dessous lira un fichier CSV, en interprétant par défaut la première ligne comme l'en-tête de colonne et trouvera le minimum entre les colonnes.

import pandas as pd

data = pd.read_csv('all16.csv')
data.min()

2voto

Roy W. Points 33

Parce que c'est lié à quelque chose que je faisais, je vais partager ici.

Et si nous ne sommes pas sûrs qu'il y ait un en-tête et que vous n'avez pas envie d'importer sniffer et d'autres choses ?

Si votre tâche est basique, telle que l'impression ou l'ajout à une liste ou un tableau, vous pouvez simplement utiliser une instruction if :

# Let's say there's 4 columns
with open('file.csv') as csvfile:
     csvreader = csv.reader(csvfile)
# read first line
     first_line = next(csvreader)
# My headers were just text. You can use any suitable conditional here
     if len(first_line) == 4:
          array.append(first_line)
# Now we'll just iterate over everything else as usual:
     for row in csvreader:
          array.append(row)

1voto

chfw Points 315

Eh bien, mon mini bibliothèque de wrappers ferait aussi bien l'affaire.

>>> import pyexcel as pe
>>> data = pe.load('all16.csv', name_columns_by_row=0)
>>> min(data.column[1])

Si vous savez quel est l'indice de la colonne d'en-tête 1, par exemple "Colonne 1", vous pouvez faire ceci à la place :

>>> min(data.column["Column 1"])

1voto

Clint Hart Points 61

Pour moi, le plus simple est d'utiliser la gamme.

import csv

with open('files/filename.csv') as I:
    reader = csv.reader(I)
    fulllist = list(reader)

# Starting with data skipping header
for item in range(1, len(fulllist)): 
    # Print each row using "item" as the index value
    print (fulllist[item])

1voto

Tim John Points 68

Je convertirais csvreader en liste, puis j'ouvrirais le premier élément.

import csv        

with open(fileName, 'r') as csvfile:
        csvreader = csv.reader(csvfile)
        data = list(csvreader)               # Convert to list
        data.pop(0)                          # Removes the first row

        for row in data:
            print(row)

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