写在前面:
我们知道如果从DataFrame中选取一个子集,选取的不是数据的拷贝,而是数据的视图,也就是说,对这个子集的修改会映射到DataFrame中,这时就需要显式地借助.copy()方法来进行数据的复制。但是我在写代码的过程遇到了另外一种情况,刚开始没有用.copy()方法,浪费了许多时间,因此在这里记录一下。
这种情况就是用数组构造一个DataFrame,在这个DataFrame上进行修改,原来的数组也跟着一起变了。
举例来说,有如下代码:
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = pd.DataFrame(a)
b.iloc[0,0] = 100
最后显示的结果是:
因此,我们应该用上.copy()方法,即
b = pd.DataFrame(a).copy()
这样对b进行修改就不会使得a也发生改变。
注意:若使用列表(list)来构造DataFrame,则在这个DataFrame上进行修改,原来的列表不变。