这是我在Python中的代码片段。这段代码完美地改变了数据帧X_real_zeros,但它也改变了X,为什么会发生?
X_real_zeros = X
for column in numeric_cols:
X_real_zeros[column] = X[column].apply(lambda x: 0 if np.isnan(x) == 1 else x)
如果我申请这样的话:
X['columnii'] = X[column].apply(lambda x: 0 if np.isnan(x) == 1 else x)
它不会更改初始数据帧X中的X [列]。
答案 0 :(得分:2)
问题在于这一行X_real_zeros = X
,而不仅仅是分配你应该使用:
X_real_zeros = X.copy()
您可以参考why should I make a copy of a data frame in pandas了解更多信息。
答案 1 :(得分:1)
执行X_real_zeros = X
时,如果没有创建名为X_real_zeros的X副本,则使用名为X_real_zeros的数据框创建新绑定,即X和X_real_zeros指向内存中的相同空间。它与list或dict的工作方式相同,解决方案是使用显式副本。
X_real_zeros = X.copy()
答案 2 :(得分:0)
分配时
X_real_zeros = X
X_real_zeros被赋予对象X的内部引用。因此,当X_real_zeros变异时,X也会改变值。要安全地复制变量,请执行以下操作:
X.copy()
这将创建一个X的新副本,您将能够安全地更改X_real_zeros。