2015-03-29 15 views
13

Ich habe eine sehr große CSV-Datei, so dass ich sie nicht alle im Speicher lesen kann. Ich möchte nur ein paar Zeilen darin lesen und verarbeiten. So suche ich eine Funktion in Pandas, die diese Aufgabe bewältigen konnte, die die grundlegende Python dies gut umgehen kann:Wie kann ich eine riesige CSV-Datei teilweise lesen?

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

Allerdings, wenn ich dies tun in Pandas, habe ich immer die erste Zeile lesen:

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

Ich suche nach einem einfacheren Weg, um diese Aufgabe in Pandas zu behandeln. Zum Beispiel, wenn ich Zeilen von 1000 bis 2000 lesen möchte. Wie kann ich das schnell machen?

Der Grund, warum ich mag Pandas verwenden, weil ich Daten in den Datenrahmen

Antwort

28

Verwenden chunksize lesen mag:

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

Um Ihren zweiten Teil zu beantworten dies zu tun:

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

Dies wird die ersten 1000 Zeilen überspringen und dann nur die nächsten 1000 Zeilen lesen, die Ihnen Zeilen 1000-2000 geben, unklar, ob Sie die Endpunkte benötigen oder nicht, aber Sie können f Bewege die Zahlen, um zu bekommen, was du willst.

+1

nett! Danke für das Teilen. –

1

Zusätzlich zu EdChums Antwort, wenn gefunden das nrows Argument nützlich, die einfach definiert die Anzahl der Zeilen, die Sie importieren möchten. Dadurch erhalten Sie keinen Iterator, sondern können nur einen Teil der gesamten Datei der Größe nrows importieren. Es funktioniert auch mit skiprows.

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