我有一个包含三个输入的数据集。
X1,X2和X3是我的输入。我试图用先前的输入预测X1的下一个值。
当我预测X1的下一个值时,缺少X1的先前输入值。然后,预测值将移至该缺失值,并将作为下一个预测值的输入。
time X1 X2 X3 predicted value of X1 (next)
0 10 20 30 50
60min 50 40 20 120
120min 120 20 80 240
180min NaN 10 20 280
在180分钟时,我的X1输入值丢失。所以我想用更早的预测值240
代替NaN
time X1 X2 X3 predicted value
180 min ** 240 ** 10 20 280
我写了代码,但是对我来说不起作用。谁能帮助我解决这个问题?
pred=[]
for index, row in data.iterrows():
val = row['X1']
if np.isnan(val):
f = row['X1','X2','X3']
val = model.predict(f)
pred.append(val)
答案 0 :(得分:1)
如果我在代码末尾正确理解了您的信息,请再添加一行:
data.loc[index, 'X1'] = val
所以您的代码将是:
pred=[]
for index, row in data.iterrows():
val = row['X1']
if np.isnan(val):
data.iloc[index]['X1'] = pred[-1]
row['X1'] = pred[-1]
f = row['X1','X2','X3']
val = model.predict(f)
pred.append(val)
希望这会有所帮助
答案 1 :(得分:0)
在data.iterrows()内部尝试。由于DataFrame的每一列都是一个Series,因此您可以使用data.iterrows()的“索引”进行访问,并使用loc []进行分配:
if np.isnan(val):
data.loc[index, 'X1']= data['predicted value of X1 (next)'][index-1]
答案 2 :(得分:0)
可以使用pandas.DataFrame.fillna来实现,以下是一个有效的示例:
import pandas as pd
df = pd.DataFrame(
data=[[float('nan'), 10, 20, 30],
[1, 11, 21, 31]],
columns=['x1', 'x2', 'x3', 'p_x1']
)
df.x1.fillna(df.p_x1, inplace=True)