En supposant avoir un modèle DataFrame, que l'on aimerait copier avec des valeurs nulles remplies ici ...
Si vous n'avez pas de NaN dans votre ensemble de données, la multiplication par zéro peut être beaucoup plus rapide:
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
L'amélioration dépend de la taille de DataFrame, mais ne l'a jamais trouvée plus lente.
Et juste pour le plaisir:
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
Mais:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
ÉDITER!!!
En supposant que vous ayez un cadre utilisant float64, ce sera le plus rapide de loin! Il est également capable de générer n'importe quelle valeur en remplaçant 0,0 par le nombre de remplissage souhaité.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
Selon le goût, on peut définir extérieurement nan, et faire une solution générale, quel que soit le type de flotteur particulier:
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