DataFrame şablonuna sahip olduğunu varsayarsak, hangisinin burada sıfır değerlerle doldurulmasını istersiniz ...
Veri kümenizde hiç NaN yoksa sıfırla çarpmak önemli ölçüde daha hızlı olabilir:
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
İyileştirme DataFrame boyutuna bağlıdır, ancak hiçbir zaman bu kadar yavaş olmamıştır.
Ve sadece lanet olsun:
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
Fakat:
In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop
DÜZENLE!!!
Float64 kullanan bir çerçeveye sahip olduğunuzu varsayarsak, bu büyük bir farkla en hızlısı olacaktır! Ayrıca 0.0'ı istenen doldurma numarasıyla değiştirerek herhangi bir değer üretebilir.
In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop
Zevkinize bağlı olarak, belirli bir şamandıra türünden bağımsız olarak nan'ı harici olarak tanımlayabilir ve genel bir çözüm yapabilir:
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