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!