Переменная изменяется после выполнения функции в Jupyter Notebook Python 3.7.1 - PullRequest
0 голосов
/ 02 февраля 2019

Итак, у меня проблема с Python относительно областей видимости переменных.Я написал пользовательскую функцию для вычисления связанных чисел скользящих средних, но она перезаписывает переменную, которую я передаю в нее.

Функция принимает массив данных pandas и целое число и вычисляет проценты на основе скользящих средних.Я загружаю переменную myArray, которая является массивом панд, затем вызываю функцию и пытаюсь сохранить выходные данные в новой переменной.

import pandas as pd
import numpy as np

def calc_Util(columnRange,periods):

    columnRange2 = pd.DataFrame(columnRange)
    numRows = columnRange2.shape[0]
    numCols  = columnRange2.shape[1]
    outputRange = pd.DataFrame(np.zeros(shape=(columnRange2.shape)),columns=columnRange2.columns)

    for c in range(numCols):
        maxColumn = columnRange2.iloc[:,c].rolling(window=periods).max().fillna(method='bfill')
        for r in range(numRows):

            outputRange.iloc[r,c] = columnRange2.iloc[r,c]/maxColumn[r]

    return outputRange


myArray = pd.DataFrame(np.random.rand(8000,6)*10)
myArray2 = myArray
myArray2.iloc[:,range(4,5)] = calc_Util(myArray.iloc[:,range(4,5)],180*24)

Я ожидаю, что myArray2 будет копией myArray, но собновлен пятый столбец.Однако после запуска этого кода консоль Jupyter Notebook показывает мне, что пятый столбец myArray был изменен на расчетные значения.

1 Ответ

0 голосов
/ 02 февраля 2019

Как предположил Джон Гордон, ошибка была вызвана неправильным пониманием myArray2 = myArray, которое создает новое имя для того же массива, но не сам новый объект массива.Следовательно, работа с myArray2 = myArray.copy() решает проблему.

...