Hướng dẫn for row in rows python - cho hàng trong hàng python
Trả lời: Đừng*!Lặp đi lặp lại trong gấu trúc là một loại chống lại và là điều bạn chỉ nên làm khi bạn đã cạn kiệt mọi lựa chọn khác. Bạn không nên sử dụng bất kỳ chức năng nào với " Show Bạn có muốn in DataFrame không? Sử dụng Bạn có muốn tính toán một cái gì đó? Trong trường hợp đó, tìm kiếm các phương thức theo thứ tự này (danh sách được sửa đổi từ đây):
Kháng cáo lên thẩm quyền Trang tài liệu về Lặp lại có một hộp cảnh báo màu đỏ khổng lồ cho biết:
* Nó thực sự phức tạp hơn một chút so với "đừng". Nhanh hơn vòng lặp: vector hóa, cythonMột số lượng tốt các hoạt động và tính toán cơ bản được "vector hóa" bởi gấu trúc (thông qua Numpy hoặc thông qua các chức năng cythonized). Điều này bao gồm số học, so sánh, giảm (hầu hết), định hình lại (như xoay vòng), tham gia và hoạt động nhóm. Nhìn qua tài liệu về chức năng cơ bản cần thiết để tìm một phương pháp vector hóa phù hợp cho vấn đề của bạn. Nếu không tồn tại, hãy thoải mái viết của riêng bạn bằng cách sử dụng các tiện ích mở rộng Cython tùy chỉnh. Điều tốt nhất tiếp theo: Liệt kê toàn diện*Danh sách các toàn bộ phải là cổng gọi tiếp theo của bạn nếu 1) không có giải pháp vector hóa, 2) Hiệu suất là quan trọng, nhưng không đủ quan trọng để vượt qua sự rắc rối của việc cythonizing mã của bạn và 3) bạn đang cố gắng thực hiện chuyển đổi theo chiều thành phần tử trên mã của bạn. Có một lượng tốt bằng chứng cho thấy rằng sự hiểu biết danh sách là đủ nhanh (và thậm chí đôi khi nhanh hơn) cho nhiều nhiệm vụ gấu trúc thông thường. Công thức rất đơn giản,
Nếu bạn có thể gói gọn logic doanh nghiệp của mình thành một chức năng, bạn có thể sử dụng danh sách hiểu biết gọi nó. Bạn có thể làm cho những thứ phức tạp tùy ý hoạt động thông qua sự đơn giản và tốc độ của mã python thô. Hãy cẩn thận Danh sách các tính toán cho rằng dữ liệu của bạn dễ làm việc - điều đó có nghĩa là các loại dữ liệu của bạn phù hợp và bạn không có NAN, nhưng điều này không thể luôn luôn được đảm bảo.
*Số dặm của bạn có thể thay đổi vì những lý do được nêu trong phần Caveats ở trên.Caveats section above. Một ví dụ rõ ràngChúng ta hãy chứng minh sự khác biệt với một ví dụ đơn giản về việc thêm hai cột gấu trúc Mã điểm chuẩn, để bạn tham khảo. Dòng ở phía dưới đo một hàm được viết bằng numpandas, một phong cách của gấu trúc pha trộn rất nhiều với numpy để vắt kiệt hiệu suất tối đa. Viết mã Numpandas nên tránh trừ khi bạn biết bạn đang làm gì. Bám sát API nơi bạn có thể (tức là, thích Tuy nhiên, tôi nên đề cập rằng nó không phải lúc nào cũng cắt và khô. Đôi khi câu trả lời cho "phương pháp tốt nhất cho hoạt động" là "nó phụ thuộc vào dữ liệu của bạn". Lời khuyên của tôi là kiểm tra các cách tiếp cận khác nhau trên dữ liệu của bạn trước khi giải quyết trên một cách giải quyết. Ý kiến cá nhân của tôi *Hầu hết các phân tích được thực hiện trên các lựa chọn thay thế khác nhau cho gia đình ITER đã trải qua lăng kính hiệu suất. Tuy nhiên, trong hầu hết các tình huống, bạn thường sẽ làm việc trên một bộ dữ liệu có kích thước hợp lý (không có gì ngoài vài nghìn hoặc 100k hàng) và hiệu suất sẽ đứng thứ hai sau tính đơn giản/khả năng đọc của giải pháp. Đây là sở thích cá nhân của tôi khi chọn một phương pháp để sử dụng cho một vấn đề. Cho người mới:
Cho những người có kinh nghiệm hơn:
Vectorization chiếm ưu thế là phương pháp thành ngữ nhất cho bất kỳ vấn đề nào có thể được vector hóa. Luôn luôn tìm cách vectorize! Khi nghi ngờ, hãy tham khảo các tài liệu hoặc xem xét Stack Overflow cho một câu hỏi hiện có về nhiệm vụ cụ thể của bạn. Tôi có xu hướng tiếp tục về việc Cython xếp hạng thấp hơn trong danh sách vì phải mất nhiều thời gian và nỗ lực hơn để thực hiện chính xác. Bạn thường sẽ không bao giờ cần phải viết mã với gấu trúc đòi hỏi mức độ hiệu suất này mà ngay cả việc hiểu danh sách cũng không thể thỏa mãn. * Như với bất kỳ ý kiến cá nhân, xin vui lòng lấy hàng đống muối! Đọc thêm
* Các phương thức chuỗi pandas được "vector hóa" theo nghĩa chúng được chỉ định trên chuỗi nhưng hoạt động trên mỗi phần tử. Các cơ chế cơ bản vẫn còn lặp đi lặp lại, bởi vì các hoạt động chuỗi vốn rất khó để vector hóa. Tại sao tôi viết câu trả lời nàyMột xu hướng phổ biến tôi nhận thấy từ người dùng mới là đặt câu hỏi về biểu mẫu "Làm thế nào tôi có thể lặp lại DF của mình để làm X?". Hiển thị mã gọi Mục đích của câu trả lời này là giúp người dùng mới hiểu rằng việc lặp lại không nhất thiết là giải pháp cho mọi vấn đề, và các giải pháp tốt hơn, nhanh hơn và thành ngữ hơn có thể tồn tại và đáng để đầu tư thời gian để khám phá chúng. Tôi không cố gắng bắt đầu một cuộc chiến lặp lại so với vectorization, nhưng tôi muốn người dùng mới được thông báo khi phát triển các giải pháp cho các vấn đề của họ với thư viện này. |