Khi chọn dữ liệu từ một khung dữ liệu Pandas, đôi khi một khung nhìn được trả về và đôi khi một bản sao được trả về. Trong khi có một logic đằng sau điều này, có cách nào để bắt Pandas để rõ ràng trả lại một chế độ xem hoặc bản sao không?Force Return của "View" thay vì sao chép trong Pandas?
Trả lời
Có hai phần cho câu hỏi của bạn: (1) cách thực hiện chế độ xem (xem phần dưới cùng của câu trả lời này) và (2) cách tạo bản sao.
tôi sẽ chứng minh với một số ví dụ dữ liệu:
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6],[None,10,20],[7,8,9]], columns=['x','y','z'])
# which looks like this:
x y z
0 1 2 3
1 4 5 6
2 NaN 10 20
3 7 8 9
Làm thế nào để tạo một bản sao: Một lựa chọn là để sao chép một cách rõ ràng DataFrame của bạn sau khi bất cứ điều gì hoạt động bạn thực hiện. Ví dụ, cho phép nói rằng chúng ta đang chọn hàng mà không có NaN:
df2 = df[~df['x'].isnull()]
df2 = df2.copy()
Sau đó, nếu bạn thay đổi giá trị trong df2 bạn sẽ thấy rằng những sửa đổi không truyền lại dữ liệu gốc (df), và rằng Gấu trúc không cảnh báo rằng "Giá trị đang cố gắng được đặt trên bản sao của một lát từ khung dữ liệu"
df2['x'] *= 100
# original data unchanged
print(df)
x y z
0 1 2 3
1 4 5 6
2 NaN 10 20
3 7 8 9
# modified data
print(df2)
x y z
0 100 2 3
1 400 5 6
3 700 8 9
Lưu ý: bạn có thể thực hiện lần truy cập hiệu suất bằng cách tạo bản sao rõ ràng.
Làm cách nào để bỏ qua cảnh báo: Ngoài ra, trong một số trường hợp, bạn có thể không quan tâm xem chế độ xem hoặc sao chép có được trả lại hay không vì mục đích của bạn là sửa đổi vĩnh viễn dữ liệu và không bao giờ quay lại dữ liệu gốc. Trong trường hợp này, bạn có thể chặn cảnh báo và thực hiện một cách vui vẻ trên con đường của mình (đừng quên rằng bạn đã tắt nó đi và dữ liệu gốc có thể hoặc không bị sửa đổi bởi mã của bạn, vì df2 có thể hoặc không thể là một bản sao):
pd.options.mode.chained_assignment = None # default='warn'
để biết thêm thông tin, xem câu trả lời tại How to deal with SettingWithCopyWarning in Pandas?
làm thế nào để làm cho một cái nhìn: Pandas sẽ ngầm bày tỏ quan điểm bất cứ nơi nào và bất cứ khi nào có thể. Chìa khóa cho điều này là sử dụng phương pháp df.loc[row_indexer,col_indexer]
. Ví dụ, để nhân lên các giá trị của cột y
bởi 100 cho chỉ có các hàng nơi cột x
không phải là null, chúng ta sẽ viết:
mask = ~df['x'].isnull()
df.loc[mask, 'y'] *= 100
# original data has changed
print(df)
x y z
0 1.0 200 3
1 4.0 500 6
2 NaN 10 20
3 7.0 800 9
jeffgoldblumthereitis.gif :-D – calben
Câu trả lời này, bực bội, trả lời ngược lại với câu hỏi được hỏi, giống như phần còn lại của internet. -1 –
Câu hỏi đặt ra là "có cách nào để bắt Pandas trả lại một cách rõ ràng một bản sao hay một bản sao?" mà tôi đã trả lời cách để tạo một bản sao một cách rõ ràng. Tôi cho rằng phần bực bội là nếu bạn muốn thay đổi một cách rõ ràng? Cũng lưu ý rằng tiêu đề câu hỏi khác với câu hỏi trong mô tả ... không có tác dụng. – MD004
- 1. Sao chép tệp trong nhật thực sao chép tên tệp (Chuỗi) thay vì tệp vào clipboard
- 2. Sự khác biệt giữa "return View()" và "return PartialView()"
- 3. một hàm thay vì chương trình sao chép và dán
- 4. git rebase: sao chép thay vì di chuyển
- 5. Android force Fragment để xây dựng lại View
- 6. $ resource.query return split strings (mảng char) thay vì một chuỗi
- 7. C++: Tránh sao chép với câu trả lời "return"
- 8. Tại sao nó tốt hơn (Return IList Thay vì trả về List)?
- 9. Kiểm tra xem khung dữ liệu có được sao chép hoặc xem trong Pandas
- 10. Sao chép cấu trúc trong C với gán thay vì memcpy()
- 11. Tại sao tôi nên sử dụng Cá chép thay vì cảnh báo trong Perl?
- 12. Phương pháp Varargs thay đổi mảng của người gọi thay vì bản sao của riêng nó?
- 13. Sao chép/Sao chép/Sao chép một Hồ bơi Ứng dụng Hiện tại trong IIS 7
- 14. Sao chép khởi của mẫu '= {}'
- 15. Modal View Controller force Định hướng cảnh quan trong iOS 6
- 16. Force của Windows Challege
- 17. Force Xcode để LUÔN sao chép các nguồn lực xây dựng thư mục trên
- 18. Tại sao FloatBuffer thay vì phao []?
- 19. Nối tiếp XML trên mạng - Lưu trữ tham chiếu thay vì Sao chép đối tượng
- 20. Làm thế nào để tạo thuộc tính NSString NSManagedObject bằng "sao chép" thay vì "giữ lại"?
- 21. Làm cách nào để sao chép một gist bằng https: // thay vì git: //
- 22. force onLayout trong subView có kích thước không thay đổi
- 23. Khi nào nên bao gồm/sao chép mã của bên thứ ba, thay vì tham chiếu/liên kết mã đó?
- 24. Force .NET để viết các số nguyên bản địa thay vì định dạng Hoa Kỳ
- 25. Force Masonry/tương tự như bỏ qua dòng chảy và lấp đầy khoảng trống thay vì
- 26. thay đổi Sao chép trong một danh sách
- 27. Cài đặt sợi Force thay vì cài đặt npm cho module Node?
- 28. Biến sao chép thay đổi ban đầu?
- 29. Tại sao sử dụng tăng :: ice_or thay vì || và tăng :: ice_and thay vì && trong enable_if?
- 30. Sao chép hoặc sao chép bộ sưu tập trong Julia
Bạn có thể cung cấp một mẫu của sự khác biệt giữa một cái nhìn và một bản sao? – cwharland
Xem ở đây để biết các quy tắc: http://stackoverflow.com/questions/23296282/what-rules-does-pandas-use-to-generate-a-view-vs-a-copy –
@cwharland, hiểu biết của tôi là sửa đổi để xem cũng sửa đổi các dataframe chính (để tham khảo), và một bản sao là ... một bản sao. – calben