Sto provando a leggere segmenti di un file CSV in un DataFrame di panda e mi trovo nei guai quando imposto i nrows a più di un certo punto. Il mio file CSV è suddiviso in diversi segmenti con diverse intestazioni/tipi di dati, quindi ho esaminato il file e trovato i numeri di riga dei diversi segmenti e salvato i numeri di riga. Quando provo a fare:Lettura di parti di file CSV di ~ 13000 righe con pandas read_csv e nrows
pd.io.parsers.read_csv('filename',skiprows=40, nrows=12646)
Funziona bene. Eventuali altre righe, e genera un errore:
CParserError: Error tokenizing data. C error: Expected 56 fields in line 13897, saw 71
E 'vero che la linea 13897 ha che molte righe, è per questo che sto cercando di utilizzare nrows e skiprows. Posso trovare l'ultima riga che leggerà i panda e non sembra diversa dal resto. Guardando il file in un editor esadecimale non vedo ancora alcuna differenza.
Ho anche provato con un altro file CSV, e ottengo risultati simili:
pd.io.parsers.read_csv('file2',skiprows=112, nrows=18524)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 18188 entries, 0 to 18187
Ma:
pd.io.parsers.read_csv('file2',skiprows=112, nrows=18525)
dà:
CParserError: Error tokenizing data. C error: Expected 56 fields in line 19190, saw 71
C'è qualcosa che mi mancano? c'è un altro modo per fare ciò?
Sto usando: pandas-0.10.1.win-amd64-py3.3
, numpy-MKL-1.7.1rc1.win-amd64-py3.3
e python-3.3.0.amd64
su Windows. Ottengo lo stesso problema con numpy-unoptimized-1.7.1rc1.win-amd64-py3.3
.
C'è qualcosa di sospetto con questa linea con le cose come stanno, dispone di 70 virgole, dove ogni riga precedente ha 55 ...? –
La riga a cui si riferisce l'errore è una con 70 virgole, sì. Ma con i salti e gli zoccoli, sto cercando di impedirgli di raggiungere quella linea. Ad esempio, quando l'errore si riferisce alla riga 13897, sto provando a leggere dalle righe 40 a 12647 + 40. Le righe che sto cercando di specificare sono normali (55 campi). – dooz