Modo per leggere le prime righe per i dataframe dei panda


100

Esiste un modo integrato read_csvper leggere solo le prime nrighe di un file senza conoscere in anticipo la lunghezza delle righe? Ho un file di grandi dimensioni che richiede molto tempo per essere letto, e occasionalmente voglio usare solo le prime, diciamo, 20 righe per ottenerne un campione (e preferisco non caricare l'intero file e prenderne la testa).

Se conoscessi il numero totale di righe, potrei fare qualcosa di simile footer_lines = total_lines - ne passarlo alla skipfooterparola chiave arg. La mia soluzione attuale è afferrare manualmente le prime nrighe con python e StringIO sui panda:

import pandas as pd
from StringIO import StringIO

n = 20
with open('big_file.csv', 'r') as f:
    head = ''.join(f.readlines(n))

df = pd.read_csv(StringIO(head))

Non è poi così male, ma esiste un modo più conciso e "pandasico" (?) Per farlo con parole chiave o qualcosa del genere?


1
Per vedere come caricare le ultime N righe, controlla questo post SO
zelusp

7
Volevi dire "pandastic"? :)
1 ''

Risposte:


182

Penso che tu possa usare il nrowsparametro. Dai documenti :

nrows : int, default None

    Number of rows of file to read. Useful for reading pieces of large files

che sembra funzionare. Utilizzando uno dei file di test standard di grandi dimensioni (988504479 byte, 5344499 linee):

In [1]: import pandas as pd

In [2]: time z = pd.read_csv("P00000001-ALL.csv", nrows=20)
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
Wall time: 0.00 s

In [3]: len(z)
Out[3]: 20

In [4]: time z = pd.read_csv("P00000001-ALL.csv")
CPU times: user 27.63 s, sys: 1.92 s, total: 29.55 s
Wall time: 30.23 s

Fantastico, devo aver perso quel parametro. Grazie.
barba

3
skiprows=Noneè anche un parametro utile da ricordare
Nitin

Qual è il modo migliore per caricare le ultime n righe? Fondamentalmente quello che fa tail (), ma devo usarlo durante il caricamento del csv. Grazie in anticipo!
Danail Petrov,
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.