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
3 Réponses :
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>
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.
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
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/... "
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)
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!!