将Pandas DataFrame作为函数参数 - Python

12
假设一个Pandas DataFrame作为参数传递给函数,那么Python是否会隐式地复制该DataFrame,还是真正的DataFrame被传递进来了?
因此,如果我在函数内对DataFrame执行操作,我是否会更改原始对象(因为引用仍然存在)?
我只是想知道在将其传递到函数并对其进行操作之前是否应该对我的DataFrame进行深拷贝。

2
我会始终建议使用深拷贝。 - BENY
这里有一个相当不错的答案: https://dev59.com/nlkT5IYBdhLWcg3wN9CW - JohnE
1个回答

18

如果函数参数是一个可变对象(例如一个DataFrame),那么您在函数中所做的任何更改都将应用于该对象。

例如:

In [200]: df = pd.DataFrame({1:[1,2,3]})

In [201]: df
Out[201]:
   1
0  1
1  2
2  3

In [202]: def f(frame):
     ...:     frame['new'] = 'a'
     ...:

In [203]: f(df)

In [204]: df
Out[204]:
   1 new
0  1   a
1  2   a
2  3   a

请看这篇文章,了解Python如何传递函数参数的良好解释。


7
数据框是可变的,而不是不可变的 - Paul H
@PaulH 也许 OP(原贴发布者)说 DataFrame 是“非”不可变(=可变)对象的例子。 - David Johns
@DavidJohns:这种写法非常模棱两可,例如“如果arg不是一只熊(比如考拉)”就很模糊。更清晰的写法是说:“如果它是一个可变对象…” - smci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接