私はデータフレームを持っています:
a b c
0 1 2 3
1 1 1 1
2 3 7 NaN
3 2 3 5
...
機械学習アルゴリズムを使用して、値が NaN である列「3」をその場で入力 (値を更新) したいと考えています。
その場で行う方法がわかりません。サンプルコード:
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
df=pd.DataFrame([range(3), [1, 5, np.NaN], [2, 2, np.NaN], [4,5,9], [2,5,7]],columns=['a','b','c'])
x=[]
y=[]
for row in df.iterrows():
index,data = row
if(not pd.isnull(data['c'])):
x.append(data[['a','b']].tolist())
y.append(data['c'])
model = LinearRegression()
model.fit(x,y)
#this line does not do it in place.
df[~df.c.notnull()].assign(c = lambda x:model.predict(x[['a','b']]))
しかし、これによりデータフレームのコピーが得られます。私が残した唯一のオプションは for ループを使用することですが、私はそれをしたくありません。パンダを使用してそれを行うには、もっとpythonicな方法があるはずだと思います。誰か助けてくれませんか?または、これを行う他の方法はありますか?