2014-06-04 5 views
1

J'utilise python 2.7 et j'essaie de lire les entrées d'un fichier CSV. J'ai fait une version séparée du fichier CSV original qui ne contient que les 10 premières lignes de données et avec le code suivant, cela fonctionne comme je le souhaite, où je peux simplement modifier l'indexation de Z dans le champ "usecols" de genfromtxt lire une plage spécifique de colonnes dans mon fichier CSV.Impossible de lire un grand fichier CSV en Python

import numpy as np 
import array 

Z = array.array('i', (i for i in range(0, 40))) 

with open('data/training_edit.csv','r') as f: 
    data = np.genfromtxt(f, dtype=float, delimiter=',', names=True, usecols=(Z[0:32])) 
print(data) 

Mais quand j'utilise ce code avec mon CSV original (250.000 lignes x 33 colonnes) je reçois ce genre de sortie et je ne sais pas pourquoi:

Traceback (most recent call last): 
File "/home/user/PycharmProjects/H-B2/Read.py", line 74, in <module> 
data = np.genfromtxt(f, dtype=float, delimiter=',', names=True,usecols=(Z[0:32])) 
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1667, in genfromtxt 
raise ValueError(errmsg) 
ValueError: Some errors were detected ! 

. 
. 
. 
Line #249991 (got 1 columns instead of 32) 
Line #249992 (got 1 columns instead of 32) 
Line #249993 (got 1 columns instead of 32) 
Line #249994 (got 1 columns instead of 32) 
Line #249995 (got 1 columns instead of 32) 
Line #249996 (got 1 columns instead of 32) 
Line #249997 (got 1 columns instead of 32) 
Line #249998 (got 1 columns instead of 32) 
Line #249999 (got 1 columns instead of 32) 
Line #250000 (got 1 columns instead of 32) 

Process finished with exit code 1 

(j'ai ajouté les points juste pour réduire la production réelle, mais vous obtenez le point, espérons)

+1

il semble y avoir un problème dans le fichier l'avez-vous vérifié? – Mansueli

+0

Vous pouvez facilement générer un autre fichier avec le même nombre de lignes (que vous savez est valide) et exécuter le même code sur ce fichier pour voir s'il s'agit d'un problème de taille ou de format – alfasin

+0

Cela ne devrait pas être la taille. Votre format csv n'est probablement pas correct (par exemple, les colonnes manquantes, etc.) – s16h

Répondre

0

Oui, je crois que vous avez juste besoin d'ajouter range(0,32) à vos usecols comme suit:

data = np.genfromtxt (f, DTYPE = flotteur, delimiter = '', noms = true, usecols = plage (0,32))

Je viens de comprendre que pour moi-même.

Questions connexes