【发布时间】:2017-11-20 19:56:43
【问题描述】:
我正在使用函数对 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 函数之前和之后应该保持完全相同,不是吗?
【问题讨论】:
-
new_df = dfnot 复制数据帧。您只需对 same 对象进行另一个引用。 -
是的,
new_df和df是同一个对象的两个名称。 -
new_df = df.copy()