Các inplace
tham số:
df.dropna(axis='index', how='all', inplace=True)
trong Pandas
và ở các khoản chung:
1. Pandas tạo một bản sao của dữ liệu gốc
2. ... thực hiện một số tính toán trên nó
3. ... gán kết quả cho dữ liệu gốc.
4. ... xóa bản sao.
Như bạn có thể đọc phần còn lại của câu trả lời của tôi ở bên dưới, chúng ta vẫn có thể có lý do chính đáng để sử dụng tham số này, tức là inplace operations
, nhưng chúng ta nên tránh nó nếu có thể, vì nó tạo ra nhiều vấn đề hơn, như:
1. Mã của bạn sẽ khó gỡ lỗi hơn (Thực ra SettingwithCopyWarning là viết tắt của cảnh báo bạn về vấn đề có thể xảy ra này)
2. Xung đột với chuỗi phương thức
Vì vậy, có thậm chí trường hợp khi chúng ta nên sử dụng nó chưa?
Chắc chắn là có. Nếu chúng ta sử dụng gấu trúc hoặc bất kỳ công cụ nào để xử lý tập dữ liệu khổng lồ, chúng ta có thể dễ dàng đối mặt với tình huống, nơi một số dữ liệu lớn có thể tiêu tốn toàn bộ bộ nhớ của chúng ta. Để tránh tác dụng không mong muốn này, chúng ta có thể sử dụng một số kỹ thuật như chuỗi phương pháp :
(
wine.rename(columns={"color_intensity": "ci"})
.assign(color_filter=lambda x: np.where((x.hue > 1) & (x.ci > 7), 1, 0))
.query("alcohol > 14 and color_filter == 1")
.sort_values("alcohol", ascending=False)
.reset_index(drop=True)
.loc[:, ["alcohol", "ci", "hue"]]
)
làm cho mã của chúng tôi nhỏ gọn hơn (mặc dù khó hiểu và gỡ lỗi hơn) và tiêu thụ ít bộ nhớ hơn vì các phương thức chuỗi hoạt động với các giá trị trả về của phương thức khác, do đó chỉ tạo ra một bản sao dữ liệu đầu vào. Chúng ta có thể thấy rõ ràng rằng chúng ta sẽ sử dụng 2 x bộ nhớ dữ liệu gốc sau các hoạt động này.
Hoặc chúng ta có thể sử dụng inplace
tham số (mặc dù khó hiểu và gỡ lỗi hơn) mức tiêu thụ bộ nhớ của chúng ta sẽ là 2 x dữ liệu gốc , nhưng mức tiêu thụ bộ nhớ của chúng ta sau thao tác này vẫn là 1 x dữ liệu gốc , điều mà nếu ai đó bất cứ khi nào làm việc với các bộ dữ liệu lớn biết chính xác có thể là lợi ích lớn.
Kết luận cuối cùng:
Tránh sử dụng inplace
tham số trừ khi bạn không làm việc với dữ liệu lớn và lưu ý các vấn đề có thể xảy ra trong trường hợp vẫn sử dụng tham số.
inplace=True
trả về trảNone
inplace=False
về một bản sao của đối tượng với thao tác được thực hiện. Các tài liệu khá rõ ràng về điều này, có điều gì đó gây nhầm lẫn với một phần cụ thể? SpeficallyIf True, do operation inplace and return None.