【问题标题】:Passing Pandas as Variable changes it将 Pandas 作为变量传递会改变它
【发布时间】:2018-11-04 16:11:35
【问题描述】:

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

答案:似乎这取决于您正在执行的操作类型,因此在我看来,如果不冒改变的风险,这是不可能的。见this和this

一经确认,我将在下面发布我认为对这种情况的正确处理方式。

原问题:

这是我希望以前有人问过的问题,但就我的研究而言,我得到的结果似乎与惯例相矛盾。

这是我的代码:

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

【问题讨论】:

标签: python pandas scope


【解决方案1】:

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

res=MyFunction(xTest.copy(deep=True))

我在上面发布的问题中的第一个链接是关于范围界定问题的精彩论述,第二个链接提供了解决方案。

【讨论】:

    【解决方案2】:

    _xTest=xTest

    这段代码意味着xTest也可以使用_xTest来引用,所以你不仅要改变_xTest在函数中的值,还要改变xTest的值。

    【讨论】:

    • 是的,我在发布后意识到这一点。我尝试了这种方法,因为我似乎无法弄清楚如何在 Python 中按值传递参数,所以我编辑了我的代码以摆脱传递参数。据我所知,我在上面发布的 URL 末尾的解决方案是不正确的。如果事实证明我只是不了解变量范围,将删除此帖子。
    • 进一步更新:这似乎与我的问题相同:stackoverflow.com/questions/13419822/… 完成研究后,我将很快修改我的问题。
    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2020-09-21
    • 1970-01-01
    • 2012-02-14
    • 2014-11-15
    相关资源
    最近更新 更多