Проверка того, является ли фрейм данных копией или представлением в Pandas

есть ли простой способ проверить, являются ли два фрейма данных разными копиями или представлениями одних и тех же базовых данных, которые не связаны с манипуляциями? Я пытаюсь понять, когда каждый из них генерируется, и учитывая, насколько своеобразными кажутся правила, я хотел бы простой способ проверить.

например, я подумал " id(df.значения) " были бы стабильны в разных представлениях, но они, похоже, не являются:

# 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

другие ответы, которые я искал, которые пытаются дать правила, но не кажутся последовательными, а также не отвечают на этот вопрос о том, как проверить:

и конечно: - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy

обновление: комментарии ниже, похоже, отвечают на вопрос-глядя на это, как и ссылка на df._is_copy атрибут (хотя последний, вероятно, очень плохая форма, так как это внутренний).

2 ответов


ответы от HYRY и Marius в комментариях!

можно проверить следующим образом:

  • проверка эквивалентности , а не (df2._is_view is True).

спасибо всем!


вы можете отслеживать память, которую потребляет ваша среда pandas/python, и, исходя из предположения, что копия будет использовать больше памяти, чем представление, сможете решить так или иначе.

Я считаю, что есть библиотеки, которые будут представлять использование памяти в самой среде python-например, Heapy / Guppy.

должна быть метрика, которую вы можете применить, которая принимает базовое изображение использования памяти до создания объекта проверки, а затем потом еще одна фотография. Сравнение двух карт памяти (предполагая, что больше ничего не было создано, и мы можем изолировать изменение из-за нового объекта) должно дать представление о том, было ли создано представление или копия.

нам нужно получить представление о разных профилях памяти каждого типа реализации, но некоторые эксперименты должны давать результаты.