我有两个数据格式df1:
index Value
0 A
1 B
2 Nan
3 D
4 Nan
和df2:
index Value
2 C
4 E
在我的jupyter笔记本中,我使用Pandas函数来填充df1在df2中丢失的值。使用以下功能:
def my_function(df, df_2):
df1.update(df2)
return
因为.update()修改了现有的数据格式,并且没有返回值,所以我的函数也不返回任何内容。当我在jupyter笔记本中运行以下代码时,就会出现我不理解的行为:
blaat = df1
my_function(blaat, df2)
现在,不仅该函数修改了“blaat”数据格式,而且还修改了df1。我不明白为什么是这样。
发布于 2022-05-12 05:19:30
将持有可变对象的变量转换为另一个变量并不会创建新对象,它只会为同一对象创建别名。
当你做的时候
blaat = df1
您正在告诉解释器,df1和blaat都是相同的对象(指向内存中相同的位置),但有两个名称。
因此,修改blaat与修改df1是一样的。您可以通过获取两个变量的内存地址来确认这一点。
id(blaat) == id(df1)
正如注释中所指出的,您必须创建df1的副本,并将其分配给blaat以创建一个新对象,而不仅仅是同一个对象的别名。
blaat = df1.copy()
如前所述,这适用于Python中的所有可变对象。所以
list_2 = list_1
id(list_2) == id(list_1) # True
list_2 = list_1.copy()
# or
list_2 = list_1[:]
id(list_2) != id(list_1) # True
https://stackoverflow.com/questions/52441702
复制相似问题