1
votes

Comment remplacer la valeur 0 de l'entrée par la valeur prédite à l'aide du modèle en python

J'ai un ensemble de données avec trois entrées.

X1, X2 et X3 sont mes entrées. J'essaie de prédire la valeur suivante de X1 avec les entrées précédentes.

Lorsque je prédis la valeur suivante de X1, une partie de la valeur d'entrée précédente de X1 est manquante. Ensuite, les valeurs prédites seront décalées vers cette valeur manquante et seront l'entrée de la prochaine valeur prédite.

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)

Ici à 180 min Ma valeur d'entrée X1 est manquante. Je veux donc mettre la valeur prédite plus tôt 240 en remplaçant NaN

time         X1         X2      X3     predicted value
180 min  ** 240 **      10      20      280

J'ai écrit le code, mais cela n'a pas fonctionné pour moi. Quelqu'un peut-il m'aider à résoudre ce problème?

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


0 commentaires

3 Réponses :


0
votes

Essayez ceci à l'intérieur de data.iterrows (). Comme chaque colonne de DataFrame est une série, vous pouvez accéder à l'aide de l '' index 'de data.iterrows () et l'attribuer à l'aide de loc []:

if np.isnan(val):
  data.loc[index, 'X1']= data['predicted value of X1 (next)'][index-1]

Consultez la documentation pour en savoir plus sur loc et ses exemples

p>


2 commentaires

lorsque j'ai utilisé votre code, les valeurs mesurées sont affichées pour la plupart valeur 0 .. Pouvez-vous me dire ce code complet que je dois appliquer avant la prédiction ou après la prédiction du modèle.


après la prédiction du modèle. La colonne «Valeur prédite de X1 (suivant)» doit d'abord être remplie.



1
votes

Si je vous comprends bien à la fin de votre code, ajoutez une ligne supplémentaire:

    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)

Donc votre code sera:

data.loc[index, 'X1'] = val

J'espère que cela aide


6 commentaires

Merci pour la réponse. Mais cela ne fonctionne toujours pas.


Quand j'ai essayé d'ajouter data.loc [index + 1, 'X1'] = val ne fonctionnait toujours pas correctement.


Oui, j'ai encore corrigé le code, je ne sais pas non plus pourquoi vous avez besoin de pred, il pourrait être supprimé. Et le code ne fonctionne pas correctement si dans le premier X1 brut est nan. Pour la prédiction de nan lorsque vous le trouvez, vous devez prendre le raw précédent.


Ya mon code, je suppose que je dois écrire après le modèle de prédiction. En fait, ce que je veux dire, c'est que si mon entrée X1 est incluse avec une valeur 0, prenez la valeur précédente précédente, puis prédisez la valeur suivante


Merci pour la réponse, je vais essayer ce code aussi.


Enfin, j'ai eu le meilleur code. Merci beaucoup pour votre aide. Si vous êtes d'accord, pouvez-vous examiner ce problème, et pouvez-vous me donner une suggestion à ce sujet? " stackoverflow.com/questions/57196557/... "



0
votes

Cela peut être réalisé en utilisant pandas.DataFrame.fillna , ci-dessous est un exemple fonctionnel:

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)


4 commentaires

Pouvez-vous expliquer un peu votre code? Je ne comprends pas pourquoi tu mets p_x1


C'est le nom de la colonne pour les valeurs prédites. J'ai créé un simple cadre de données avec quatre colonnes 'x1', 'x2', 'x3', 'p_x1', la dernière ligne de code fait l'affaire qui remplira les valeurs nan dans la colonne x1 de la colonne p_x1.


Merci pour la réponse.


J'espère que cela aide!!