如何使用python中的模型将输入的0值替换为预测值

时间:2019-07-23 16:00:10

标签: python-3.x pandas machine-learning lstm

我有一个包含三个输入的数据集。

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)

3 个答案:

答案 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]

Check documentation for more about loc and it's examples

答案 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)