Передача панд как переменная меняет ее - PullRequest
0 голосов
/ 25 мая 2018

Пересмотренный вопрос : Как передать фрейм данных 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

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Хорошо, из того, что я могу сказать, правильный способ передачи объекта Pandas, если вы хотите завершить, чтобы избежать любого риска изменения глобального объекта, - это сделать явную копию:

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

Первая ссылка в вопросе, который я разместил выше, является отличным дискурсом по вопросу определения объема, а вторая ссылка дает решение.

0 голосов
/ 25 мая 2018

_xTest=xTest

Этот код означает, что xTest можно также ссылаться с помощью _xTest, поэтому вы не только меняете значение _xTest в функции, но и xTestзначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...