2015-03-29 17 views
13

Ho un file molto grande CSV in modo che io non li riesco a leggere nella memoria. Voglio solo leggere ed elaborare alcune righe in esso. Così Sto cercando una funzione in Pandas che potrebbe gestire questo compito, che il pitone di base in grado di gestire bene questo:Come posso leggere parzialmente un enorme file CSV?

with open('abc.csv') as f: 
    line = f.readline() 
    # pass until it reaches a particular line number.... 

Tuttavia, se faccio questo in panda, ho sempre letto la prima riga:

datainput1 = pd.read_csv('matrix.txt',sep=',', header = None, nrows = 1) 
datainput2 = pd.read_csv('matrix.txt',sep=',', header = None, nrows = 1) 

sto cercando un modo più semplice per gestire questo compito in panda. Ad esempio, se voglio leggere le righe da 1000 a 2000. Come posso farlo rapidamente?

Il motivo che voglio usare i panda, perché voglio leggere i dati nella cornice di dati

risposta

28

Uso chunksize:

for df in pd.read_csv('matrix.txt',sep=',', header = None, chunksize=1): 
    #do something 

Per rispondere alla tua seconda parte fare questo:

df = pd.read_csv('matrix.txt',sep=',', header = None, skiprows=1000, chunksize=1000) 

Questo salterà le prime 1000 righe e quindi leggere solo il prossimo 1000 righe dando righe 1000-2000, poco chiaro se si richiedono i punti finali da includere o no, ma si può f trascina i numeri per ottenere quello che vuoi.

+1

bello! grazie per averlo condiviso –

1

Oltre alla risposta EdChums, è utile trovare l'argomento nrows che definisce semplicemente il numero di righe che si desidera importare. In tal modo si ottiene un iteratore Non tiratevi ma può solo importare una parte dell'intero file di dimensione nrows. Funziona anche con skiprows.

df = pd.read_csv('matrix.txt',sep=',', header = None, skiprows= 1000, nrows=1000) 
Problemi correlati