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:
In [19]: columns = ["col{}".format(i) for i in xrange(3000)]
In [20]: indices = xrange(2000)
In [21]: orig_df = pd.DataFrame(42.0, index=indices, columns=columns)
In [22]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
100 loops, best of 3: 12.6 ms per loop
In [23]: %timeit d = orig_df * 0.0
100 loops, best of 3: 7.17 ms per loop
Die Verbesserung hängt von der Größe des DataFrames ab, wurde jedoch nie langsamer.
Und nur zum Teufel:
In [24]: %timeit d = orig_df * 0.0 + 1.0
100 loops, best of 3: 13.6 ms per loop
In [25]: %timeit d = pd.eval('orig_df * 0.0 + 1.0')
100 loops, best of 3: 8.36 ms per loop
Aber:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
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.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
Je nach Geschmack kann man nan extern definieren und eine allgemeine Lösung finden, unabhängig vom jeweiligen Schwimmertyp:
In [39]: nan = np.nan
In [40]: %timeit d = pd.eval('orig_df > nan + 0.0')
100 loops, best of 3: 4.39 ms per loop