я читал просмотры против копий в pandas (ссылки: 1 2 3 ), и я экспериментировал с фреймом данных после нарезки и копирования с атрибутами _is_copy и _is_view . Но не могу понять это полностью.
Из документации,
Каждый раз, когда массив меток или логический вектор участвует в операции индексации, результатом будет копия. При одиночной метке / скалярной индексации и нарезке, например 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 работали должным образом . Это действительно была копия.
Когда я пытался получить данные элементов, возраст которых <1, т.е. new_data1 без метода copy (), это была копия, поскольку я выполнял логическое маскирование . Таким образом, для is_copy не установлено значение Нет. </p>
Вопросы
Q1. А затем, когда я использовал copy () для получения элементов и присвоения new_data2, это не было ни копией, ни представлением.
new_data2._is_view # False
new_data2._is_copy is None #True
Тогда что такое new_data2? копировать или просматривать?