Möglichkeit, die ersten paar Zeilen für Pandas Dataframe zu lesen

100

Gibt es eine integrierte Möglichkeit, read_csvnur die ersten nZeilen einer Datei zu lesen, ohne vorher die Länge der Zeilen zu kennen? Ich habe eine große Datei, deren Lesen lange dauert, und möchte gelegentlich nur die ersten 20 Zeilen verwenden, um ein Beispiel davon zu erhalten (und es vorziehen, nicht das ganze Ding zu laden und den Kopf davon zu nehmen).

Wenn ich die Gesamtzahl der Zeilen wüsste, könnte ich so etwas tun footer_lines = total_lines - nund dies an das skipfooterSchlüsselwort arg übergeben. Meine aktuelle Lösung besteht darin, die ersten nZeilen manuell mit Python und StringIO an Pandas zu übertragen:

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))

Es ist nicht so schlimm, aber gibt es eine präzisere, "pandasische" (?) Möglichkeit, dies mit Schlüsselwörtern oder so etwas zu tun?

Bart
quelle
1
Um zu sehen, wie die letzten N Zeilen
geladen werden, checken Sie
7
Meinten Sie "pandastisch"? :)
1 ''

Antworten:

182

Ich denke, Sie können den nrowsParameter verwenden. Aus den Dokumenten :

nrows : int, default None

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

das scheint zu funktionieren. Verwenden einer der großen Standardtestdateien (988504479 Byte, 5344499 Zeilen):

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
DSM
quelle
Genial, muss diesen Parameter verpasst haben. Vielen Dank.
Bart
3
skiprows=Noneist auch ein nützlicher Parameter zu erinnern
Nitin
Wie lade ich die letzten n Zeilen am besten? Grundsätzlich, was tail () macht, aber ich muss es beim Laden der CSV verwenden. Danke im Voraus!
Danail Petrov