Suponiendo que tenga una plantilla DataFrame, que le gustaría copiar con valores cero llenos aquí ...
Si no tiene NaN en su conjunto de datos, multiplicar por cero puede ser significativamente más rápido:
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
La mejora depende del tamaño de DataFrame, pero nunca lo encontré más lento.
Y solo por el gusto de hacerlo:
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
Pero:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
¡¡¡EDITAR!!!
Suponiendo que tiene un marco que usa float64, ¡este será el más rápido por un gran margen! También puede generar cualquier valor reemplazando 0.0 por el número de llenado deseado.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
Dependiendo del gusto, uno puede definir externamente nan y hacer una solución general, independientemente del tipo de flotador particular:
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