ではNaNを埋めるために、私は、データ分析の多くを行うと操作を行う新/高速化する方法を見つけることに興味があります。私はjezraelの方法に遭遇したことはありませんでした。私はそれを通常の方法と比較することに興味がありました。注記:これはOPの質問に対する答えではなく、むしろjezraelの方法の効率性の実例です。これは答えではないので、人々が役に立たないと思ったらこの投稿を削除します(そして、忘却に落とし込まれた後!)。削除する必要があると思われる場合は、コメントを残してください。
適度なサイズのデータフレームを作成し、df.notnull()。astype(int)メソッドと単純なインデックス作成(通常どおりに行う方法)の両方を使用して複数の置換を行いました。後者は約5倍遅いことが判明しました。大規模な交換を行う人のための単なる一例です。
from __future__ import division, print_function
import numpy as np
import pandas as pd
import datetime as dt
# create dataframe with randomly place NaN's
data = np.ones((1e2,1e2))
data.ravel()[np.random.choice(data.size,data.size/10,replace=False)] = np.nan
df = pd.DataFrame(data=data)
trials = np.arange(100)
d1 = dt.datetime.now()
for r in trials:
new_df = df.notnull().astype(int)
print((dt.datetime.now()-d1).total_seconds()/trials.size)
# create a dummy copy of df. I use a dummy copy here to prevent biasing the
# time trial with dataframe copies/creations within the upcoming loop
df_dummy = df.copy()
d1 = dt.datetime.now()
for r in trials:
df_dummy[df.isnull()] = 0
df_dummy[df.isnull()==False] = 1
print((dt.datetime.now()-d1).total_seconds()/trials.size)
この収率はそれぞれ0.142秒および0.685秒である。優勝者は誰かが明らかです。
[すべてのNaN値をpandasデータフレームの列にあるゼロで置き換えるにはどうすればいいですか?](http://stackoverflow.com/questions/13295735/how-can-i-replace-all-the-私の答えをコピーしないでください。 –