Dengan asumsi memiliki template DataFrame, mana yang ingin disalin dengan nilai nol diisi di sini ...
Jika Anda tidak memiliki NaN dalam kumpulan data Anda, mengalikan dengan nol bisa jauh lebih cepat:
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
Peningkatan bergantung pada ukuran DataFrame, tetapi tidak pernah menemukannya lebih lambat.
Dan hanya untuk itu:
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
Tapi:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
EDIT !!!
Dengan asumsi Anda memiliki bingkai yang menggunakan float64, ini akan menjadi yang tercepat dengan margin yang sangat besar! Itu juga dapat menghasilkan nilai apa pun dengan mengganti 0,0 ke nomor isian yang diinginkan.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
Tergantung pada selera, seseorang dapat mendefinisikan nan secara eksternal, dan melakukan solusi umum, terlepas dari jenis float tertentu:
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