Есть ли простой способ проверить, являются ли два кадра данных разными копиями или представлениями одних и тех же базовых данных, которые не связаны с манипуляциями? Я пытаюсь понять, когда все сгенерировано, и учитывая, насколько ясны эти правила, я бы хотел легко протестировать.
Например, я думал, что "id (df.values)" будет устойчивым по представлениям, но они, похоже, не являются:
# Make two data frames that are views of same data.
df = pd.DataFrame([[1,2,3,4],[5,6,7,8]], index = ['row1','row2'],
columns = ['a','b','c','d'])
df2 = df.iloc[0:2,:]
# Demonstrate they are views:
df.iloc[0,0] = 99
df2.iloc[0,0]
Out[70]: 99
# Now try and compare the id on values attribute
# Different despite being views!
id(df.values)
Out[71]: 4753564496
id(df2.values)
Out[72]: 4753603728
# And we can of course compare df and df2
df is df2
Out[73]: False
Другие ответы, которые я искал, которые пытаются дать правила, но не кажутся последовательными, а также не отвечают на этот вопрос о том, как тестировать:
-
Какие правила использует Pandas для создания представления или копии?
-
Pandas: субиндексирующие фреймы данных: копирует и просматривает
И, конечно же, - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy
ОБНОВЛЕНИЕ: Комментарии ниже, похоже, отвечают на вопрос - поиск атрибута df.values.base
вместо атрибута df.values
делает, как и ссылку на атрибут df._is_copy
(хотя последнее, вероятно, очень плохое, поскольку оно является внутренним).