pandas将一列设置为1,但两个df都会更改

时间:2017-04-07 16:38:42

标签: python pandas

我正在尝试将bD设为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

3 个答案:

答案 0 :(得分:3)

abdf是对同一对象的引用。当您更改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)

您应该使用copy。改变

a=df
b=df

a=df.copy()
b=df.copy()

查看this参考,更深入地讨论了这个问题。当我开始使用熊猫时,我也有这种困惑。