Python函数意外地运行

时间:2017-11-20 19:56:43

标签: python function pandas

我正在使用函数对pandas数据帧进行非常简单的转换,但我并不期望该函数会改变输入数据帧(但确实如此)。我想知道为什么......

这是我的代码:

x = pd.DataFrame({'a': [1,2,3], 'b': [3,4,5]})

def transform(df, increment):
    new_df = df
    new_df.a = new_df.a + increment
    return new_df

new_x = transform(x, 1)

new_x # output shows new_x.a is [2,3,4], which is expected.
x # output shows x.a is also [2,3,4]. I thought it should be [1,2,3]

为什么会这样?我认为,在函数中,所有操作都在new_df上执行,因此输入x应该在我运行此transform函数之前和之后保持完全相同,不是'{1}}。是吗?

1 个答案:

答案 0 :(得分:1)

这是因为它不会创建副本,而是x的另一个“引用” 对象

x = pd.DataFrame({'a': [1,2,3], 'b': [3,4,5]})


def transform(df, increment):
    new_df = df.copy() # <--- piece to change
    new_df.a = new_df.a + increment
    return new_df

new_x = transform(x, 1)

new_x # output shows new_x.a is [2,3,4], which is expected.
x # output shows x.a is now [1,2,3].

当您添加.copy()时,这将为您提供预期的行为