数据框参数被函数更改。如何避免它被变异?
dataframe argument being changed by a function. How to avoid it being mutated?
我知道 pandas 数据框是可变的。
我正在将数据帧传递给函数,我不想更改原始数据帧,但确实如此。
我以为只要我重新分配数据帧变量并避免使用.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
如果您不想修改更改函数内的方法,您可以将数据帧的副本发送到函数:
b = testFunc3(a.copy())
我知道 pandas 数据框是可变的。
我正在将数据帧传递给函数,我不想更改原始数据帧,但确实如此。
我以为只要我重新分配数据帧变量并避免使用.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
如果您不想修改更改函数内的方法,您可以将数据帧的副本发送到函数:
b = testFunc3(a.copy())