我正在尝试1
dfb
列D
,但是,当我运行此代码时,它还会将 dfa
列D
更改为1
...为什么会这样,为什么变量是相互关联的?以及如何仅更改 dfb
?
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
输出:
>>> a
A B C D
0 98 84 3 1
1 13 35 76 1
2 17 84 28 1
3 22 9 41 1
4 54 3 20 1
>>> b
A B C D
0 98 84 3 1
1 13 35 76 1
2 17 84 28 1
3 22 9 41 1
4 54 3 20 1
>>>
a
,b
和df
是对同一对象的引用。当您更改b['D']
时,您实际上是在更改实际对象的该列。相反,您似乎想要复制数据帧:
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
这里也有详细的回应。
尝试复制数据帧时不使用 =
使用PD。DataFrame.copy(yourdataframe)
a = pd.DataFrame.copy(df)
b = pd.DataFrame.copy(df)
b['D'] = 1
这应该可以解决您的问题
你应该使用copy
.改变
a=df
b=df
自
a=df.copy()
b=df.copy()
查看此参考,其中更深入地讨论了此问题。当我开始使用熊猫时,我也有这种困惑。