这是我对Python类的期望。我有一个具有特定值的变量num
。类实例x
首先调用它,然后该类通过函数self.num
更改其add_one
值。 num
保留其原始值。
class Test_Class:
def __init__(self, num):
self.num = num
def show(self):
return self.num
def add_one(self):
self.num = self.num+1
num = 50
x = Test_Class(num)
x.add_one()
print (x.show())
print (num)
# Output
# 51
# 50
但是出于某些奇怪的原因,我对Pandas数据框使用了相同的逻辑,但是好像obj.df
直接链接到原始df_test
,所以当我更改{{1} }通过obj_df
,它也会更改add_new_col
。我想要的是让df_test
不添加df_test
。
NEW_COL
答案 0 :(得分:1)
在您的类的__init__
方法中,使用行self.df = df.copy()
将self.df
初始化为原始数据帧的副本。如果我们修改您给出的示例,则输出如下:
df_test = pd.DataFrame({'Col1':[1, 2, 3, 4, 5], 'Col2':[3, 4, 5, 6, 7]})
class Test_Class:
def __init__(self, df):
self.df = df.copy()
def add_new_col(self, df, column_name): # this function requires a df as parameter
df[column_name] = 100
obj = Test_Class(df_test)
obj.add_new_col(obj.df, 'NEW_COL')
print (obj.df)
print (df_test)
Col1 Col2 NEW_COL
0 1 3 100
1 2 4 100
2 3 5 100
3 4 6 100
4 5 7 100
Col1 Col2
0 1 3
1 2 4
2 3 5
3 4 6
4 5 7