Có cách nào dễ dàng để kiểm tra xem hai khung dữ liệu là các bản sao khác nhau hoặc chế độ xem của cùng một dữ liệu cơ bản không liên quan đến thao tác không? Tôi đang cố gắng để có được một va li về khi mỗi được tạo ra, và đưa ra cách thức riêng biệt các quy tắc có vẻ là, tôi muốn một cách dễ dàng để kiểm tra.Kiểm tra xem khung dữ liệu có được sao chép hoặc xem trong Pandas
Ví dụ, tôi đã nghĩ "id (df.values)" sẽ ổn định trên quan điểm, nhưng họ dường như không thể:
câu trả lời# 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
khác tôi đã nhìn lên mà cố gắng để cung cấp cho quy tắc, nhưng dường như không nhất quán, và cũng không trả lời câu hỏi này như thế nào để kiểm tra:
Và tất nhiên: - http://pandas.pydata.org/pandas-docs/stable/indexing.html#returning-a-view-versus-a-copy
UPDATE: Comments dưới đây dường như để trả lời các câu hỏi - nhìn vào thuộc tính chứ không phải df.values.base
Thuộc tính df.values
thực hiện nó, cũng như tham chiếu đến df._is_copy
thuộc tính (mặc dù sau này có thể là hình thức rất xấu vì nó là một nội bộ).
Hmmm, 'df2._is_view' trả về' Đúng' nhưng được cho là được đánh dấu là riêng tư/nội bộ, có thể có cách tốt hơn để thực hiện. – Marius
Đối với trường hợp của bạn, bạn có thể sử dụng: 'df2.values.base là df.values.base' – HYRY
Nói chung làm' 'df.values'' sẽ tạo một bản sao, trừ khi một dtype đơn (từ tính toán đắt tiền) . Tại sao bạn quan tâm nếu một cái nhìn của nó và bạn đang thực sự cố gắng làm gì? – Jeff