为什么new_data2不是副本,即使我使用了.copy()方法[pandas] 。

问题描述 投票:0回答:1

我在看 pandas中的视图与副本(链接 : 1 2 3),我在实验一个数据框架。用_is_copy和_is_view属性进行切分和复制后。. 但无法完全理解。

从文档中。

只要在索引操作中涉及到一个标签数组或布尔向量,结果就会是一个副本,对于单标签标量索引和切片,例如df.ix[3:6]或df.ix[:,'A'],就会返回一个视图。对于单标签标量索引和分片,例如df.ix[3:6]或df.ix[:,'A'],将返回一个视图。

快照

code-snaphsot

编码

# In[1] :
import pandas as pd

# In[2]:

data=pd.read_csv('titanic.csv')
data.head()

# In[4]:
#copying a column 

new_age=data.age.copy()

# In[6]:
#checking wheather the copied data is view or a copy

new_age._is_view, new_age._is_copy is None                   
#Fine : it a copy, not view

# In[7]:
#Now doing another operation

new_data1=data.loc[data.age<10,:]
new_data2=data.loc[data.age<10,:].copy()

# In[8]:
# checking if it is a view  

new_data1._is_view, new_data2._is_view                        
# Both are not view : thus a copy

# In[10]:
new_data1._is_copy is None, new_data2._is_copy is None     

# as first results a false, new_data1 is copy
# while the second new_data2 is neither a copy nor view even if copy() is used
  • 所以当我试图复制一列时,_is_view和_is_copy就像预期的那样工作了。这确实是一个副本。

  • 当我试图在没有copy()方法的情况下获取元素的年龄<1即new_data1的数据时,它是一个复制,因为我在做布尔掩码。因此is_copy没有设置为None。

疑问

Q1. 当我使用copy()获取元素并分配给new_data2时,它既不是复制也不是视图。

 new_data2._is_view          # False 

 new_data2._is_copy is None  #True

那么new_data2是什么?是复制还是视图?

python python-3.x pandas dataframe copy
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.