我已经构建了两个像这样的Pandas数据帧:
import panda as pd
d = {'FIPS' : pd.Series(['01001', '01002']), 'count' : pd.Series([3, 4])}
df1 = pd.DataFrame(d)
df2 = df1
我想更改df2中的一个值。这就是我尝试过的:
df2.loc[df2['FIPS'] == '01001','FIPS'] = '01003'
此行似乎更新了df1和df2,但我不明白为什么。
答案 0 :(得分:1)
因为df2
只是df1
的引用。它们指向内存中的同一个对象,只是名称不同。如果你执行df2=df1.copy()
它应该为df2
创建一个新的内存并且只更新它..plus你在导入pandas中输入错误了:)
您可以使用id(df1)
检查对象所在的内存地址,并查看与df2
相同的内存地址,并在使用.copy()
方法时更改
欢迎来到SO!
答案 1 :(得分:0)
而不是df2 = df1
,而是df2 = df1.copy()
。
问题是python中的变量就像"指针"当您为它们分配复杂的数据结构时。它们存储对其值的引用,而不是实际值。因此,在上面的代码中,df2成为df1的另一个名称或别名。因此意外的变化。