Pandas中target = train['claim']和target = train['claim'].copy()有什么区别?
Pandas DataFrame列赋值两种写法的差异
二者核心差异为是否和原DataFrame的claim列共享内存,具体区别如下:
target = train['claim']
该写法获取的是原train中claim列的视图(View),target和train['claim']指向内存中同一块数据。后续如果对target内的元素做修改,原train的claim列对应值也会同步变动,这也是Pandas链式索引常见的副作用来源。
示例场景:执行target[0] = 100后,打印train['claim'].iloc[0]会得到修改后的100。target = train['claim'].copy()
该写法默认执行深拷贝(copy方法默认参数为deep=True),会开辟独立的内存空间存储和原claim列完全一致的数据,target和原DataFrame的claim列完全独立。后续对target的任何修改都不会影响原train的数据。
补充:如果显式传入
copy(deep=False)则为浅拷贝,仅拷贝数据结构引用,针对存储复合类型(如列表、字典)的列时,修改元素依然可能影响原数据。
内容的提问来源于stack exchange,提问作者SUMIT JHA
相关产品推荐
相关产品推荐

