Was ist der beste Weg, um einen mit Nullen gefüllten Pandas-Datenrahmen einer bestimmten Größe zu erstellen?
Ich habe benutzt:
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
Gibt es einen besseren Weg, dies zu tun?
data
? Warum müssen Sie eine andere Struktur erstellen, um sie zu halten?Antworten:
Sie können dies versuchen:
quelle
%timeit temp = np.zeros((10, 11)); d = pd.DataFrame(temp, columns = ['col1', 'col2',...'col11'])
156. Aber%timeit d = pd.DataFrame(0, index = np.arange(10), columns = ['col1', 'col2',...'col11'])
nimmt uns 171. Ich bin überrascht, dass es nicht schneller geht.d.set_value(params)
nach der Initialisierung so etwas wie Nullen ausführend
. Eine einfache Lösung ist :d = pd.DataFrame(0.0, index=np.arange(len(data)), columns=feature_list)
.Meiner Meinung nach ist es am besten, dies mit Numpy zu tun
quelle
TypeError: 'numpy.float64' object does not support item assignment
np.float64
Ähnlich wie @Shravan, jedoch ohne Verwendung von numpy:
Dann können Sie damit machen, was Sie wollen:
quelle
Wenn Sie möchten, dass der neue Datenrahmen denselben Index und dieselben Spalten wie ein vorhandener Datenrahmen hat, können Sie den vorhandenen Datenrahmen einfach mit Null multiplizieren:
quelle
Wenn Sie bereits einen Datenrahmen haben, ist dies der schnellste Weg:
Vergleichen mit:
quelle
Angenommen, Sie haben eine Vorlage DataFrame, die Sie mit den hier ausgefüllten Nullwerten kopieren möchten ...
Wenn Ihr Datensatz keine NaNs enthält, kann das Multiplizieren mit Null erheblich schneller sein:
Die Verbesserung hängt von der Größe des DataFrames ab, wurde jedoch nie langsamer.
Und nur zum Teufel:
Aber:
BEARBEITEN!!!
Angenommen, Sie haben einen Frame mit float64, dann ist dies mit großem Abstand der schnellste! Es kann auch einen beliebigen Wert generieren, indem 0.0 durch die gewünschte Füllnummer ersetzt wird.
Je nach Geschmack kann man nan extern definieren und eine allgemeine Lösung finden, unabhängig vom jeweiligen Schwimmertyp:
quelle