En s'appuyant sur l'expérience de @Godsmith train de pensées et répondre au besoin de @Zitrax (je pense) de faire la copie des données pour tous les attributs dans le constructeur :
class ConfusionMatrix(pd.DataFrame):
def __init__(self, df, *args, **kwargs):
try:
# Check if `df` looks like a `ConfusionMatrix`
# Could check `isinstance(df, ConfusionMatrix)`
# But might miss some "ConfusionMatrix-elligible" `DataFrame`s
assert((df.columns == df.index).all())
assert(df.values.dtype == int)
self.construct_copy(df, *args, **kwargs)
return
except (AssertionError, AttributeError, ValueError):
pass
# df is just data, so continue with normal constructor here ...
def construct_copy(self, other, *args, **kwargs):
# construct a parent DataFrame instance
parent_type = super(ConfusionMatrix, self)
parent_type.__init__(other)
for k, v in other.__dict__.iteritems():
if hasattr(parent_type, k) and hasattr(self, k) and getattr(parent_type, k) == getattr(self, k):
continue
setattr(self, k, deepcopy(v))
Ce site ConfusionMatrix
hérite d'une classe pandas.DataFrame
et ajoute une tonne d'autres attributs et méthodes qui doivent être recalculés, à moins que l'utilisateur n'ait besoin d'une autre méthode. other
les données de la matrice peuvent être copiées. C'est en cherchant une solution que j'ai trouvé cette question.
0 votes
La question suivante pourrait vous intéresser [avertissement : c'est moi qui l'ai posée] : stackoverflow.com/questions/990758/
0 votes
Faites attention. Les avertissements affichés par certains des répondeurs ne sont pas à sous-estimer.
0 votes
Cela n'a pas l'air très lisible, je vais probablement changer mon code en utilisant l'héritage pour encapsuler l'autre objet à la place.