我有一个 Python 函数,可以通过多种方式修改 pandas 数据框。这包括删除一列。与我的直觉相反,此删除操作不仅限于函数的环境(如果这是正确的词),而是传递到主编码环境,删除输入数据帧中的列。
import pandas as pd
data = {
"name": ["Sally", "Mary", "John"],
"age": [50, 40, 30],
"qualified": [True, False, False]
}
df1 = pd.DataFrame(data)
def dropCol(df):
df.drop(columns='age',inplace=True)
dropCol(df1) #show that the "age" col is now gone from the input df
有没有办法封锁函数,使其无法影响函数环境之外的对象?我希望我的输入不受影响,并且仅让函数通过
return
运算符影响对象空间。
如果您不希望作为参数发送的对象发生更改,您可以发送副本。您可以将其发送为
df1.copy()
。
>>> import pandas as pd
>>> data = {
... 'name': ['Sally', 'Mary', 'John'],
... 'age': [50, 40, 30],
... 'qualified': [True, False, False]
... }
>>> df1 = pd.DataFrame(data)
>>> def drop_age_col(df):
... df.drop(columns='age', inplace=True)
>>> drop_age_col(df1.copy())
>>> df1
name age qualified
0 Sally 50 True
1 Mary 40 False
2 John 30 False