熊猫将一列设置为等于 1,但两个 DF 都发生了变化



我正在尝试1dfbD,但是,当我运行此代码时,它还会将 dfaD更改为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
>>> 

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

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

最新更新