Gibt es eine einfache Möglichkeit zu überprüfen, ob zwei Datenrahmen unterschiedliche Kopien oder Ansichten derselben zugrunde liegenden Daten sind, die keine Manipulationen beinhalten? Ich versuche, sie in den Griff zu bekommen, wenn sie erzeugt werden, und angesichts der Eigenständigkeit der Regeln möchte ich eine einfache Testmöglichkeit haben.Überprüfen, ob der Datenrahmen in Pandas kopiert oder angezeigt wird
Zum Beispiel dachte ich, „id (df.values)“ würde über Ansichten stabil sein, aber sie scheinen nicht zu sein:
# 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
Andere Antworten, die ich habe, die zu geben versuchen aufblickte Regeln, aber scheint nicht im Einklang, und diese Frage nicht beantworten auch, wie man Test:
Und natürlich: - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy
UPDATE: Kommentare unten scheint die Frage zu beantworten - Blick auf die df.values.base
Attribut statt df.values
Attribut tut es, wie auch eine Bezugnahme auf die df._is_copy
Attribut (obwohl letzteres wahrscheinlich sehr schlechte Form ist, da es ein internes ist).
Hmmm, 'df2._is_view' gibt' True' zurück, aber da es als privat/intern markiert ist, könnte es einen besseren Weg geben. – Marius
Für Ihren Fall können Sie verwenden: 'df2.values.base ist df.values.base' – HYRY
Im Allgemeinen wird' 'df.values'' eine Kopie erstellen, es sei denn, es ist ein einzelner dtype (da es rechenintensiv ist) . Warum interessiert es dich, wenn es eine Ansicht ist und was versuchst du eigentlich zu tun? – Jeff