我在看 pandas中的视图与副本(链接 : 1 2 3),我在实验一个数据框架。用_is_copy和_is_view属性进行切分和复制后。. 但无法完全理解。
从文档中。
只要在索引操作中涉及到一个标签数组或布尔向量,结果就会是一个副本,对于单标签标量索引和切片,例如df.ix[3:6]或df.ix[:,'A'],就会返回一个视图。对于单标签标量索引和分片,例如df.ix[3:6]或df.ix[:,'A'],将返回一个视图。
# 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是什么?是复制还是视图?