Python lambda函数有2个数据帧

时间:2016-05-29 10:02:45

标签: python pandas lambda dataframe apply

这是我在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 [列]。

3 个答案:

答案 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。