Les Pandas Dataframe AttributeError: 'DataFrame" objet n'a pas d'attribut "design_info'
Je suis en train d'utiliser le predict()
fonction de la statsmodels.formula.api
LO mise en œuvre. Lorsque je passe un nouveau bloc de données à la fonction permettant d'obtenir des valeurs prédites pour un échantillon de données, result.predict(newdf)
renvoie l'erreur suivante: 'DataFrame' object has no attribute 'design_info'
. Qu'est-ce que cela signifie et comment puis-je résoudre ce problème? Le plein de sperme est:
p = result.predict(newdf)
File "C:\Python27\lib\site-packages\statsmodels\base\model.py", line 878, in predict
exog = dmatrix(self.model.data.orig_exog.design_info.builder,
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2088, in __getattr__
(type(self).__name__, name))
AttributeError: 'DataFrame' object has no attribute 'design_info'
EDIT: Voici un exemple reproductible. L'erreur semble se produire quand je cornichon et puis unpickle l'objet de résultat (dont j'ai besoin dans mon projet actuel):
import cPickle
import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
df = pd.DataFrame({"A": [10,20,30,324,2353], "B": [20, 30, 10, 1, 2332], "C": [0, -30, 120, 11, 2]})
result = sm.ols(formula="A ~ B + C", data=df).fit()
print result.summary()
test1 = result.predict(df) #works
f_myfile = open('resultobject', "wb")
cPickle.dump(result, f_myfile, 2)
f_myfile.close()
print("Result Object Saved")
f_myfile = open('resultobject', "rb")
model = cPickle.load(f_myfile)
test2 = model.predict(df) #produces error
Merci d'éditer votre question et comprennent un exemple de code ainsi que la trace de la pile complète.
J'ai ajouté plein de sperme. Je peux essayer et d'ajouter un exemple reproductible si on ne sait pas pourquoi cette erreur se produit généralement.
Je pense que nous avons besoin d'un exemple reproductible. Je ne vois pas la raison pour laquelle la formule de l'information
Ajout d'un reproduit exemple, semble avoir quelque chose à voir avec le décapage et la depickling l'objet.
Oui, je pensais que comme un candidat possible. Il est également possible de supprimer les données avant de décapage, si nous ne voulons prédire après unpickling ce qui entraînera aussi le même problème. Ma conjecture est que statsmodels ne dispose pas de tests unitaires pour le décapage lorsque les formules ont été utilisées.
J'ai ajouté plein de sperme. Je peux essayer et d'ajouter un exemple reproductible si on ne sait pas pourquoi cette erreur se produit généralement.
Je pense que nous avons besoin d'un exemple reproductible. Je ne vois pas la raison pour laquelle la formule de l'information
design_info
n'est pas là, mais je ne comprends pas tout le chemin de code pour cela avec l'interaction avec patsy. Vous pouvez également ouvrir un problème avec statsmodels sur github. Il pourrait ne pas être très robuste pour garder la formule de renseignements jointe à l'original dataframe.Ajout d'un reproduit exemple, semble avoir quelque chose à voir avec le décapage et la depickling l'objet.
Oui, je pensais que comme un candidat possible. Il est également possible de supprimer les données avant de décapage, si nous ne voulons prédire après unpickling ce qui entraînera aussi le même problème. Ma conjecture est que statsmodels ne dispose pas de tests unitaires pour le décapage lorsque les formules ont été utilisées.
OriginalL'auteur Michael | 2013-12-22
Vous devez vous connecter pour publier un commentaire.
Le décapage et la unpickling de pandas DataFrame n'a pas d'enregistrer et de restaurer les attributs qui ont été attachées par un utilisateur, pour autant que je sais.
Car la formule de l'information est actuellement stocké avec le DataFrame de la conception originale de la matrice, cette information est perdue après unpickling les Résultats et le Modèle de l'instance.
Si vous n'utilisez pas les variables catégorielles et des transformations, puis la bonne designmatrix peut être construit avec patsy.dmatrix. Je pense que la suite devrait fonctionner
ou la construction de la matrice de conception pour la prédiction directement convient également de travailler la Note nous avons besoin de l'ajouter explicitement une constante que la formule ajoute par défaut.
Si la formule et de la conception de la matrice contiennent (stateful) la transformation et les variables catégorielles, alors il n'est pas possible de facilement construire la matrice de conception sans la formule originale de l'information. De la construction à la main et de faire tous les calculs explicitement est difficile dans ce cas, et perd tous les avantages de l'utilisation de formules.
La seule véritable solution est de pickle la formule de l'information
design_info
indépendamment du dataframeorig_exog
.Solution 1 produit la même erreur dans l'exemple de code. Solution 2 donne
ValueError: matrices are not aligned
à nouveau avec l'exemple de code.Je fixe les deux exemples, le premier que j'ai oublié d'ajouter
transform=False
pour éviter l'appel de patsy, dans le deuxième exemple, j'ai juste oublié d'ajouter la constante qui patsy ajoute automatiquement.OriginalL'auteur Josef