我有一个具有pandas数据帧属性的类。我想在同一个类中定义另一个属性,该属性在更改数据帧时会发生变化。我认为一个二传手可能是正确的方法,但我无法让它工作。这是一个玩具示例:
import pandas as pd
class Foo(object):
def __init__(self, df=None):
self._df = df
self.altered = False # bool, set to True if self._df changes
@property
def df(self):
return self._df
@df.setter
def df(self, df):
self.altered = True # since _df might change here set self.altered True
self._df = df
df_test = pd.DataFrame([[1,2,3]], columns=['a','b','c'])
cl = Foo(df_test)
cl.df.loc[0, 'a'] = 3 # change a default value in dataframe
print(cl.df)
print(cl.altered)
打印更改的数据帧,但cl.altered仍然设置为False。
有什么建议吗?
答案 0 :(得分:3)
我对熊猫的了解并不多。但是没有调用setter,因为该行是:
cl.df.loc[0, 'a'] = 3
如果该行是:
,则会调用它cl.df = 3
您可以做的一件事是在初始化实例时存储原始df
的副本,并执行以下操作:
@property
def altered(self):
return self._orig_df == self._current_df