Tôi bối rối về các quy tắc mà Pandas sử dụng khi quyết định rằng lựa chọn từ khung dữ liệu là bản sao của khung dữ liệu gốc hay chế độ xem trên bản gốc.
Ví dụ: nếu tôi có
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Tôi hiểu rằng query
một bản sao trả về một bản sao giống như
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
sẽ không ảnh hưởng đến khung dữ liệu ban đầu , df
. Tôi cũng hiểu rằng các lát cắt vô hướng hoặc được đặt tên trả về một chế độ xem, do đó các phép gán cho chúng, chẳng hạn như
df.iloc[3] = 70
hoặc là
df.ix[1,'B':'E'] = 222
sẽ thay đổi df
. Nhưng tôi bị lạc khi nói đến những trường hợp phức tạp hơn. Ví dụ,
df[df.C <= df.B] = 7654321
thay đổi df
, nhưng
df[df.C <= df.B].ix[:,'B':'E']
không làm.
Có một quy tắc đơn giản nào mà Pandas đang sử dụng mà tôi đang thiếu không? Điều gì đang xảy ra trong những trường hợp cụ thể này; và đặc biệt, làm cách nào để thay đổi tất cả các giá trị (hoặc một tập hợp con giá trị) trong khung dữ liệu đáp ứng một truy vấn cụ thể (như tôi đang cố gắng thực hiện trong ví dụ cuối cùng ở trên)?
Lưu ý: Điều này không giống với câu hỏi này ; và tôi đã đọc tài liệu , nhưng không hiểu nó. Tôi cũng đã đọc qua các câu hỏi "Có liên quan" về chủ đề này, nhưng tôi vẫn thiếu quy tắc đơn giản mà Pandas đang sử dụng và cách tôi áp dụng quy tắc đó - ví dụ - sửa đổi các giá trị (hoặc một tập hợp con giá trị) trong khung dữ liệu đáp ứng một truy vấn cụ thể.
.query
LUÔN LUÔN sẽ trả về một bản sao vì những gì nó đang làm (chứ không phải một chế độ xem), bởi vì nó được đánh giá bởi n numberxpr. Vì vậy, tôi sẽ thêm điều đó vào 'quy tắc'