Python 在函数中编辑dataframe而不返回dataframe对象 我正在编写一些代码来编辑函数范围内的数据帧,其中返回一个单独编辑的变量,一个列表。
根据我对作用域的理解,如果一个变量在一个函数中被编辑但没有被赋值,那么这个值就不会被保存到外部作用域中。像这样:Python 在函数中编辑dataframe而不返回dataframe对象 我正在编写一些代码来编辑函数范围内的数据帧,其中返回一个单独编辑的变量,一个列表。,python,pandas,dataframe,in-place,Python,Pandas,Dataframe,In Place,根据我对作用域的理解,如果一个变量在一个函数中被编辑但没有被赋值,那么这个值就不会被保存到外部作用域中。像这样: def var_and_list_function(var, my_list): var = var + 1 print(var) my_list.append(50) return my_list var = 1 my_list = var_and_list_function(var, my_list) # local value is 2 2 v
def var_and_list_function(var, my_list):
var = var + 1
print(var)
my_list.append(50)
return my_list
var = 1
my_list = var_and_list_function(var, my_list) # local value is 2
2
var # but outside of the function it is still 1
1
所以,这就是我认为它应该对熊猫起作用的方式,但这不是我发现的。我必须在函数中创建一个副本,以便不编辑原件,即使未按上述方式返回
dataframe = pd.DataFrame([1,1,1])
print(dataframe)
0
0 1
1 1
2 1
my_list = [18,15,16]
def dataframe_and_list_function(dataframe, my_list):
dataframe[0] = dataframe[0].apply(lambda x: x+1)
print('Your dataframe inside the function is:')
print(dataframe)
my_list.append(4)
return my_list
my_list = dataframe_and_list_function(dataframe, my_list)
Your dataframe inside the function is:
0
0 2
1 2
2 2
dataframe # but the dataframe itself has been edited without being returned
0
0 2
1 2
2 2
这个问题有意义吗
我希望数据帧不会在被调用函数的作用域之外被编辑,但这里我们看到数据帧在本地作用域内被编辑,并在外部作用域中被写入
我是不是遇到了与熊猫有关的已知问题?或者更确切地说,这根本不是一个问题,只是从Python到Pandas实现中的不一致吗?后者是我的假设,但我还是不确定,这就是为什么我要问 这似乎是python中浅拷贝与深拷贝的一种情况——查看df.copy这是python中的预期行为。数据帧是可变对象;您可能认为它们是通过引用传递的。因此,当您更改引用对象时,实际上更改了原始数据帧。同样的逻辑也适用于列表、字典和其他可变类型。然而,对于不可变类型(int、str、bool),您所期望的将非常有用。谢谢@Marat!