我正在尝试将b
列D
设为1
,但是,当我运行此代码时,它也会更改df a
列{{1 }} D
也......为什么这样,变量为什么会链接?以及如何仅更改df 1
?
b
输出:
import pandas as pd, os, numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
a=df
b=df
b['D']=1
答案 0 :(得分:3)
a
,b
和df
是对同一对象的引用。当您更改b['D']
时,实际上是在更改实际对象的该列。相反,您似乎想要复制DataFrame:
import pandas as pd, os, numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
a=df.copy()
b=df.copy()
b['D']=1
产生
b.head()
Out:
A B C D
0 63 52 92 1
1 98 35 43 1
2 24 87 70 1
3 38 4 7 1
4 71 30 25 1
a.head()
Out:
A B C D
0 63 52 92 80
1 98 35 43 78
2 24 87 70 26
3 38 4 7 48
4 71 30 25 61
还有详细的回复here。
答案 1 :(得分:2)
尝试复制数据框时不要使用=
使用pd.DataFrame.copy(yourdataframe)代替
a = pd.DataFrame.copy(df)
b = pd.DataFrame.copy(df)
b['D'] = 1
这应该可以解决您的问题
答案 2 :(得分:1)