Supponendo di avere un modello DataFrame, che si vorrebbe copiare con zero valori riempiti qui ...
Se non hai NaN nel tuo set di dati, la moltiplicazione per zero può essere notevolmente più veloce:
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
Il miglioramento dipende dalle dimensioni di DataFrame, ma non è mai stato trovato più lento.
E solo per il gusto di farlo:
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
Ma:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
MODIFICARE!!!
Supponendo che tu abbia un frame che usa float64, questo sarà il più veloce con un enorme margine! È anche in grado di generare qualsiasi valore sostituendo 0,0 al numero di riempimento desiderato.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
A seconda del gusto, si può definire esternamente nan e fare una soluzione generale, indipendentemente dal particolare tipo di galleggiante:
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