Аргумент dataframe изменяется функцией. Как избежать его мутации? - PullRequest
0 голосов
/ 30 апреля 2020

Я знаю, что датафрейм pandas изменчив.

Я передаю фрейм данных в функцию и не хочу, чтобы исходный фрейм был изменен, но это так. Я думал, что пока я переназначаю переменную dataframe и избегаю использования .drop (inplace = True) и .reset_index (inplace = True), все будет в порядке, но это не так.
Какой обходной путь для .dropna () и .reset_index () существует, чтобы избежать искажения моего исходного кадра данных?

Спасибо.

def makeChoice():
    return bool(random.getrandbits(1))
def makeChange(row,choice):
    if choice==True:
        result = row['b']
    else:
        result = np.nan
    return result    
workingDF['b']= workingDF.apply(lambda row: makeChange(row, makeChoice()), axis=1)
workingDF = workingDF.dropna()
workingDF = workingDF.reset_index(drop=True)
return workingDF    
a = pd.DataFrame({'a':[1,2], 'b':[3,4]})
print('a - original:')
print(a)
b = testFunc3(a)
print('b after testFunc3():')
print(b)
print('a after testFunc3():')
print(a)

Это дает следующий вывод:

a - original:
   a  b
0  1  3
1  2  4
b after testFunc3():
   a    b
0  1  3.0
a after testFunc3():
   a    b
0  1  3.0
1  2  NaN

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете отправить копию фрейма данных в функцию, если не хотите изменять, измените методы внутри функции:

b = testFunc3(a.copy())
...