将Pandas作为变量传递会更改它

时间:2018-05-25 09:43:20

标签: python pandas scope

修改后的问题:如何将pandas数据帧传递给函数,然后使用该数据帧而不更改原始/全局版本。

回答:似乎这取决于您正在执行的操作类型,因此在我看来,如果没有发生变化的风险,这是不可能的。请参阅thisthis

在我确认之后,我会发布我认为对这种情况的正确处理。

原始问题:

这是我以前曾经问过的事情,但对于我的研究,似乎我得到的结果与惯例相矛盾。

这是我的代码:

xTest = pd.DataFrame({'A' : ['Test']})
def MyFunction():
    _xTest=xTest
    _xTest['yPred'] = 1

    return _xTest

res=MyFunction()
xTest.head()

运行后,xTest.head()显示' yPred'列已附加到其中。 从阅读Python范围,例如下面的URL以及其他地方,我会相信这不应该发生?

Python variable scope approach

2 个答案:

答案 0 :(得分:0)

_xTest=xTest

此代码表示xTest也可以使用_xTest引用,因此您不仅要更改_xTest的函数值,还要更改xTest的值

答案 1 :(得分:0)

好的,我可以告诉传递Pandas对象的正确方法,如果你想完成避免任何全局修改的风险是做一个明确的副本:

解析度= MyFunction的(xTest.copy(深= TRUE))

我在上面发布的问题中的第一个链接是关于范围问题的优秀讨论,第二个链接提供了解决方案。