2016-08-20 5 views
0

Ich würde gerne eine csv-Datei in Stücke mit pd.read_csv (Pfad, Chunksize = N) bis zum Ende in einer ziemlich eleganten und effizienten Art und Weise öffnen. Das Problem ist, dass, sobald der Zeiger aus der Datei die folgende Meldung von Fehlern ist erfolgt:handling Ausnahme beim Lesen von Daten mit pandas.read_csv()

df.get_chunk() 
Traceback (most recent call last): 

File "<ipython-input-115-061ea8dbcbad>", line 1, in <module> 
df.get_chunk() 

File "C:\Users\fedel\Anaconda2\lib\site-packages\pandas\io\parsers.py", line 784, in get_chunk 
return self.read(nrows=size) 

File "C:\Users\fedel\Anaconda2\lib\site-packages\pandas\io\parsers.py", line 763, in read 
ret = self._engine.read(nrows) 

File "C:\Users\fedel\Anaconda2\lib\site-packages\pandas\io\parsers.py", line 1213, in read 
data = self._reader.read(nrows) 

File "pandas\parser.pyx", line 766, in pandas.parser.TextReader.read (pandas\parser.c:7988) 

File "pandas\parser.pyx", line 813, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:8629) 

StopIteration 

und der Code kann nicht mehr weiter!

Ich glaube, dass eine try/except-Anweisung mich diese Nachricht vermeiden wird, daher wird der Code mit den nächsten Ausgaben weitergehen. Sagen, dass ich einen Python-Datenrahmen wie, dass man habe Sie mit den folgenden Codezeilen

path = r"C:\Users\fedel\Desktop" + '\\fileName.csv' 
pd.DataFrame(np.random.randn(30, 3), columns = list('abc')).to_csv(path, index = False) 
df = pd.read_csv(path, chunksize = 6) 

Ich denke, dass eine Aussage wie die folgenden ein, dass Fehler vermeiden könnte und lassen Sie den Code mit den nächsten Ausgaben weiter generieren

while True: 
    try: 
     df.get_chunk() 
    except TypeOfError: 
     funcyfunction() 

könnten Sie bitte diese letzte Ausnahme beheben, die Codezeilen behandelt?

+0

Versuchen: 'df = pd.read_csv (path, chunksize = 6, error_bad_lines = False) 'um die Fehler verursachenden Zeilen zu überspringen. –

+0

Nein, ich kann nicht! Es liefert mir immer noch eine Fehlermeldung –

+0

Könnten Sie den vollständigen Traceback-Fehler buchen? –

Antwort

1

Sie könnten versuchen:

df = pd.read_csv(path, chunksize=6) 
for chunk in df: 
    print(chunk) 

Incase Sie Operationen in jedem Chunk auszuführen, die Sie tun können:

for chunk in df: 
    chunk['d'] = chunk[['a', 'b']].mean(axis=1) # Average of columns 'a' and 'b' 
    print(chunk) 
+0

Auf diese Weise kann ich nur den "Chunk" sehen, ich möchte sie sogar verwalten –

+0

Möchten Sie diese Chunks zu einem einzigen "Dataframe" -Objekt kombinieren? –

+0

Sagen Sie, dass ich für jeden Zyklus Spalte 'a' und Spalte 'b' nur auswählen möchte und eine dritte pandas.Series, die den Durchschnitt der Zeilen ist –

Verwandte Themen