2017-09-20 1 views
1

ich eine große CSV-Datei (7 GB) und ich verwendet, um diese Codes in Pandas zu lesen:wie alle bis auf eine Spalte vor verketten Brocken verarbeiten, wenn die Verwendung chunks große CSV-Datei lesen

chunks=pd.read_table('input_filename', chunksize=500000) 
df=pd.DataFrame() 
df=pd.concat((chunk==1) for chunk in chunks) 

Dies funktioniert für mich, weil die Datei One-Hot-codiert ist, so dass die chunk==1 Teil 0s und 1s in boolesche Werte konvertieren, die mich etwas Speicherverbrauch gespeichert.

Jetzt möchte ich diese Methode verwenden, um in einer anderen Datei zu lesen, das einzige Problem ist, dass die neue Datei eine ID Spalte hat, die nicht one-hot codiert ist. Meine Frage ist: Wie kann ich die ID Spalte intakt halten und die restlichen Spalten auf die gleiche Weise konvertieren?

ich versucht, einige subsetting Techniken, einschließlich:

df=pd.concat((chunk.loc[:, -1]==1) for chunk in chunks)

aber keiner von ihnen bisher gearbeitet.

Danke!

Antwort

1

Versuchen Sie folgendes:

chunks = pd.read_csv('input_filename', chunksize=500000, index_col='ID') 
df = pd.concat([chunk.astype(bool) for chunk in chunks]).reset_index() 
+0

ich auf die Idee gekommen! Aber es wirft einen Fehler aus: 'Der Generatorausdruck muss geklammert sein, wenn nicht das einzige Argument. Und dann habe ich versucht: 'df = pd.concat ((chunk.set_index ('ID'). Astype (bool)) für Chunk in Chunks, ignore_index = True)', immer noch der gleiche Fehler ... Vielleicht habe ich die Klammern in eingefügt der falsche Ort? – user3768495

+0

@ user3768495, ich habe meinen Beitrag aktualisiert - bitte überprüfen ... – MaxU

+0

Hallo @MaxU, ich habe das auch selbst versucht. Immer noch derselbe Fehler. Könnte es an verschiedenen Versionen von Python/Pandas liegen? Mein Python ist 2.7.13 und mein Pandas ist 0.20.2. Vielen Dank! – user3768495

Verwandte Themen