Ich habe einen Pandas Datenrahmen, den ich in mehrere kleinere Stücke von jeweils 100k Zeilen aufteilen möchte, dann auf der Festplatte speichern, so dass ich die Daten einlesen und einzeln verarbeiten kann. Ich habe versucht, mit dill
und hdf
Speicher, wie CSV und Rohtext scheint eine Menge Zeit zu nehmen.Effizientes Lesen und Schreiben von Pandas Datenrahmen
Ich versuche dies auf einer Teilmenge von Daten mit ~ 500k Zeilen und fünf Spalten mit gemischten Daten. Zwei enthält Strings, ein Integer, ein Float und der letzte enthält Bigramm-Zählungen von sklearn.feature_extraction.text.CountVectorizer
, gespeichert als scipy.sparse.csr.csr_matrix
Sparse-Matrix.
Es ist die letzte Spalte, mit der ich Probleme habe. Dumping und das Laden der Daten geht ohne Problem, aber wenn ich versuche, tatsächlich auf die Daten zuzugreifen, ist es stattdessen ein Pandas.Series-Objekt. Zweitens ist jede Zeile in dieser Reihe ein Tupel, das stattdessen den gesamten Datensatz enthält.
# Before dumping, the original df has 100k rows.
# Each column has one value except for 'counts' which has 1400.
# Meaning that df['counts'] give me a sparse matrix that is 100k x 1400.
vectorizer = sklearn.feature_extraction.text.CountVectorizer(analyzer='char', ngram_range=(2,2))
counts = vectorizer.fit_transform(df['string_data'])
df['counts'] = counts
df_split = pandas.DataFrame(np.column_stack([df['string1'][0:100000],
df['string2'][0:100000],
df['float'][0:100000],
df['integer'][0:100000],
df['counts'][0:100000]]),
columns=['string1','string2','float','integer','counts'])
dill.dump(df, open(file[i], 'w'))
df = dill.load(file[i])
print(type(df['counts'])
> <class 'pandas.core.series.Series'>
print(np.shape(df['counts'])
> (100000,)
print(np.shape(df['counts'][0])
> (496718, 1400) # 496718 is the number of rows in my complete data set.
print(type(df['counts']))
> <type 'tuple'>
mache ich einen offensichtlichen Fehler, oder gibt es einen besseren Weg, um diese Daten in diesem Format zu speichern, eine, die raubend nicht sehr zeit? Es muss auf meine vollständigen Daten mit 100 Millionen Zeilen skalierbar sein.
Wie haben Sie erstellen/anhängen die Spalte zählt? – MaxU
Ich habe dies dem Code – Tobias
hinzugefügt Ich denke nicht, dass es eine gute Idee ist, eine spärliche Matrix als Pandasäule zu speichern - IMO, es ist ein fehleranfälliger Weg. Ich würde sie getrennt speichern ... – MaxU