Esiste un modo semplice per verificare se due frame di dati sono copie o viste diverse degli stessi dati sottostanti che non implicano manipolazioni? Sto cercando di ottenere una presa quando ognuno viene generato, e visto quanto siano idiosincratiche le regole, mi piacerebbe un modo semplice per testare.Verifica se la cornice dati è copia o visualizza in Panda
Per esempio, ho pensato "ID (df.values)" sarebbero stabili attraverso punti di vista, ma non sembrano essere:
# 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
altre risposte che ho guardato up che cercano di dare regole, ma non sembrano coerenti, e anche non rispondere a questa domanda di come prova:
E naturalmente: - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy
UPDATE: Commenti qui sotto sembrano rispondere alla domanda - guardando l'attributo df.values.base
piuttosto che L'attributo df.values
lo fa, così come un riferimento allo df._is_copy
attributo (anche se quest'ultimo è probabilmente una forma molto cattiva dato che è un interno).
Hmmm, 'df2._is_view' restituisce' Vero', ma dato che è contrassegnato come privato/interno, potrebbe esserci un modo migliore per farlo. – Marius
Per il tuo caso, puoi usare: 'df2.values.base è df.values.base' – HYRY
In generale facendo' 'df.values'' creerai una copia, a meno che non sia un singolo dtype (come dal costo computazionale) . Perché ti importa se è una visione e cosa stai cercando di fare? – Jeff