2016-09-13 9 views
1

Problembeschreibung:Mehrere Datenframe-Spalten mit kategorialen Labels initiieren

Ich muss 1000 csv-Dateien in einen Datenrahmen laden. Alle Dateien haben die gleichen Spalten. Die Werte in jeder der Spalten gehören zu einer begrenzten Menge von möglichen Werten in allen Fällen (unterschiedlich pro Spalte). Die Länge der Werte liegt in den 100ern der Zeichen. Ich kenne diese Werte vorher nicht.

Mein Ansatz bestand darin, jede der Dateien zu analysieren und in einen Datenrahmen mit kategorischen Spalten zu konvertieren und sie im hdfs-Speicher zu speichern. Später concat alle sie zusammen in "in memory" Datenrahmen.

Da ich alle diese Datenrahmen aufgrund von widersprüchlichen Kategoriewerten nicht verketten kann, möchte ich einen leeren Datenrahmen erstellen, mit denselben Spalten und allen Kategoriewerten in den Dateien, die ich verarbeitet habe.

Der leere kategorisierte Datenrahmen ist mein Ausgangspunkt, um nacheinander zu verketten.

df=pd.DataFrame(columns=["A","B"], dtypes={"A":"category","B":"category"} categories={"A":["a","b","c"],"B":["A","B","C","D"]}) 

df.concat[df1,df2,df3,d4] 

oder so möchte ich ....

würde eine andere Strategie besser funktionieren?

So etwas wie

+0

ich nicht kategorisieren würde, bis Sie Ihren in-memory concat Schritt abzuschließen. Im Grunde würde ich alle CSV-Dateien in eine HDF5-Datei konvertieren und dann diese HDF5-Datei analysieren, die Kategorien erstellen und sie in eine andere HDF5-Datei schreiben und wahrscheinlich die ursprüngliche löschen. Wenn genügend Speicherplatz vorhanden wäre, würde ich die Dateien einfach so lesen: 'df = pd.concat ([pd.read_csv (f) für f in Dateien])', erstellen Sie die Kategorien und schreiben Sie sie in eine HDF5-Datei . Hilft das? – Kartik

+0

Es hilft, danke. Nach Ihrem Denken kann ich einen massiven HDF-Datenrahmen auf der Festplatte erstellen, was möglich ist. Erstellen Sie dann aus diesem Datenrahmen einen neuen mit den Kategorien, die möglicherweise in den Speicher passen. Anstelle von pd.concat würde ich store.put (df, append = True) machen. Dies kann funktionieren. Ich bin auf schnellen SSDs. Schreibt auf HDF funktioniert nicht auf Multi-Prozess, wird einige Zeit dauern. Cheers. –

+0

Ja, Sie sollten vorsichtig sein, nicht auf HDF5 in mehreren Threads zu schreiben. Und wenn Sie nur CSV lesen und schreiben, kann der Multithread-Workflow mit Sicherheit zu einer geringeren Leistung führen. Vergessen Sie nicht, Ihre Spalten als [Datenspalten] (http://pandas.pydata.org/pandas-docs/stable/io.html#query-via-data-columns) zu definieren, damit Sie Ihre Tabelle leicht hashen können jeweils eine Spalte, um Kategorienwerte zu bestimmen. Schauen Sie sich auch das [Kochbuch] (http://pandas.pydata.org/pandas-docs/stable/cookbook.html#hdfstore) an ... – Kartik

Antwort

Verwandte Themen