Salta le righe durante l'importazione dei panda csv


97

Sto cercando di importare un file .csv utilizzando pandas.read_csv(), tuttavia non voglio importare la seconda riga del file di dati (la riga con indice = 1 per 0-indicizzazione).

Non vedo come non importarlo perché gli argomenti utilizzati con il comando sembrano ambigui:

Dal sito web dei panda:

skiprows : tipo elenco o numero intero

Numeri di riga da saltare (indicizzati 0) o numero di righe da saltare (int) all'inizio del file. "

Se inserisco skiprows=1gli argomenti, come fa a sapere se saltare la prima riga o saltare la riga con indice 1?


2
Immagino che, poiché afferma che può essere "simile a un elenco o intero" e quindi ti dà due opzioni (salta righe o salta # righe all'inizio) quindi se gli dai la lista [1] salterà semplicemente la riga 1 (2a fila). Se gli avessi dato un numero intero (ad esempio 10), salterebbe le prime 10 righe.
Ffisegydd

1
Fantastico che ha funzionato. Grazie mille. Mi chiedevo solo come avrebbe differenziato tra index e int. [] è la risposta.
thosphor

Risposte:


144

Puoi provare tu stesso:

>>> import pandas as pd
>>> from StringIO import StringIO
>>> s = """1, 2
... 3, 4
... 5, 6"""
>>> pd.read_csv(StringIO(s), skiprows=[1], header=None)
   0  1
0  1  2
1  5  6
>>> pd.read_csv(StringIO(s), skiprows=1, header=None)
   0  1
0  3  4
1  5  6

Sì grazie, avevo solo bisogno di sapere che l'indice è stato specificato tra parentesi quadre [].
thosphor

11
in Python 3: from io import StringIO
Dima Lituiev

^ Non è necessario importare affatto, è direttamente accessibile come pd.compat.StringIO .
cs95

30

Non ho ancora la reputazione di commentare, ma voglio aggiungere alla risposta di alko per ulteriori riferimenti.

Dai documenti :

skiprows: una raccolta di numeri per le righe nel file da saltare. Può anche essere un numero intero per saltare le prime n righe


14

Ho avuto lo stesso problema durante l'esecuzione degli skiprows durante la lettura del file csv. Stavo donando skip_rows = 1 questo non funzionerà

Un semplice esempio dà un'idea di come usare gli skiprows durante la lettura del file csv.

import pandas as pd

#skiprows=1 will skip first line and try to read from second line
df = pd.read_csv('my_csv_file.csv', skiprows=1)  ## pandas as pd

#print the data frame
df

1

Tutte queste risposte mancano di un punto importante: l'ennesima riga è l'ennesima riga nel file e non l'ennesima riga nel set di dati. Ho una situazione in cui scarico alcuni dati antiquati sull'indicatore di flusso dall'USGS. L'intestazione del set di dati è commentata con "#", la prima riga dopo sono le etichette, quindi viene visualizzata una riga che descrive i tipi di data e infine i dati stessi. Non so mai quante righe di commento ci sono, ma so quali sono le prime due righe. Esempio:

----------------------------- AVVERTIMENTO -------------------- --------------

Alcuni dei dati che hai ottenuto da questo database del servizio geologico degli Stati Uniti

potrebbe non aver ricevuto l'approvazione del Direttore. ... agency_cd site_no datetime tz_cd 139719_00065 139719_00065_cd

5s 15s 20d 6s 14n 10s USGS 08041780 2018-05-06 00:00 CDT 1,98 A

Sarebbe bello se ci fosse un modo per saltare automaticamente l'ennesima riga così come l'ennesima riga.

Come nota, sono stato in grado di risolvere il mio problema con:

import pandas as pd
ds = pd.read_csv(fname, comment='#', sep='\t', header=0, parse_dates=True)
ds.drop(0, inplace=True)

-1

skip[1] salterà la seconda riga, non la prima.


-8

Anche essere sicuri che il file è in realtà un file CSV. Ad esempio, se avevi un file .xls e hai semplicemente modificato l'estensione del file in .csv, il file non verrà importato e restituirà l'errore precedente. Per verificare se questo è il tuo problema, apri il file in Excel e probabilmente dirà:

"Il formato del file e l'estensione di" Nomefile.csv "non corrispondono. Il file potrebbe essere danneggiato o non sicuro. A meno che non ti fidi della sua fonte, non aprirlo. Vuoi aprirlo comunque?"

Per correggere il file: apri il file in Excel, fai clic su "Salva con nome", scegli il formato del file da salvare con nome (usa .cvs), quindi sostituisci il file esistente.

Questo era il mio problema e ho risolto l'errore per me.


9
Questo potrebbe essere stato il tuo problema, ma non ha nulla a che fare con la domanda né tenta di rispondere. Spiega semplicemente qualche altro problema aggiuntivo che hai avuto. Potresti anche dire "ricorda anche di caricare il tuo laptop, il mio non aveva la batteria e ho perso tutte le mie modifiche. Questo era il mio problema"
JC Rocamonde
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.