2017-05-09 7 views
2

Ich habe eine 3 GB CSV-Datei, die geändert werden muss. Ich habe eine Spalte, die ich will Lambda-Funktion anzuwenden, um (das sollte den Wert der Zeilen ändern)Pandas gelten für große CSV-Datei

Die Lösung habe ich versucht, so weit ist die CSV als segmentierte Datei zu lesen, aber das Speicherproblem immer noch geschieht

Dies ist, was ich bisher versucht:

dataframe = read_csv(file_path, iterator=True, chunksize=10000) 

for chunk in dataframe: 
    chunk['column_name'].apply(change_row_lambda_function) 

dataframe.to_csv(result_file_path, sep=',') 
+1

Was genau passiert? –

+0

laden nur die Spalten relevant – vks

+0

Seine nur löst einen Speicherfehler vor der Iteration beendet (pandas.parser.TextReader._read_low_memory) –

Antwort

0

Try this:

# write header (column names) 
read_csv(file_path, nrows=1).head(0).to_csv(result_file_path) 

dataframe = read_csv(file_path, iterator=True, chunksize=10000) 

for chunk in dataframe: 
    chunk['column_name'] = chunk['column_name'].apply(change_row_lambda_function) 
    chunk.to_csv(result_file_path, mode='a', header=None) 
+0

jedes Mal, wenn ich in CSV speichern überschreibt die Datei, und einige, wo in der Mitte der Datei das Programm noch löst den Speicherfehler aus –

+0

@JoeDoe: Wenn Sie 'mode = 'a'' an' to_csv'-Methode übergeben (wie MaxU getan hat), wird es die Daten anhängen. –

+0

Ich denke, das funktioniert gerade jetzt, aber es gibt immer noch ein Problem. nachdem das letzte Stück angehängt wurde, hebt das Programm den low_memory auf. Diese Technik funktioniert auch bei größeren Dateien? –

Verwandte Themen