Làm cách nào để bạn áp dụng một hàm cho nhiều cột của khung dữ liệu trong python?
Bài viết này sẽ giới thiệu cách áp dụng một hàm cho nhiều cột trong Pandas DataFrame. Chúng tôi sẽ sử dụng cùng một DataFrame như bên dưới trong tất cả các mã ví dụ Show
đầu ra
Sử dụng import pandas as pd import numpy as np df = pd.DataFrame([ [5,6,7,8], [1,9,12,14], [4,8,10,6] ], columns = ['a','b','c','d']) def x(a): return a + 1 df_new = df.apply(x, axis = 1) print("The original dataframe:") print(df) print("The new dataframe:") print(df_new) 1 để áp dụng các chức năng cho các cột trong PandasPhương thức 1 cho phép áp dụng một hàm cho toàn bộ Khung dữ liệu, trên các cột hoặc hàng. Chúng tôi đặt tham số 3 là 0 cho hàng và 1 cho cộtTrong các ví dụ được hiển thị bên dưới, chúng tôi sẽ tăng giá trị của DataFrame mẫu bằng hàm mà chúng tôi đã xác định trước đó
đầu ra
Chúng ta cũng có thể áp dụng một hàm cho nhiều cột, như hình bên dưới
đầu ra
Cột 0 mới được thêm vào là tổng dữ liệu trong cột 1 và 2. Bản thân DataFrame là đối số ẩn được truyền cho hàm. Các cột có thể được truy cập bằng chỉ mục như trong ví dụ trên hoặc bằng tên cột, như được hiển thị bên dưới
Nó thực hiện thao tác tương tự như ví dụ trên. Chúng tôi sử dụng hàm 3 tại đây. 4 và 5 đề cập đến cột 1 và 2 trong khung dữ liệu Trong bài viết này, chúng tôi sẽ so sánh hiệu suất của hai phương pháp tôi. e. Áp dụng phương thức và Vectorization có thể được sử dụng để áp dụng một hàm trên khung dữ liệu và trả về nhiều cột mới chúng tôi sẽ làm theo các bước bên dưới để tạo nhiều cột đó cho khung dữ liệu bằng chức năng tùy chỉnh
Bắt đầu nào Tạo một khung dữ liệuHãy tạo một khung dữ liệu với hai cột, tên và kích thước. chúng tôi sẽ sử dụng các chuỗi và số nguyên ngẫu nhiên để tạo các cột này cho khung dữ liệu có hình dạng (10000, 2) 5Hãy trực quan hóa mẫu có kích thước 5 từ khung dữ liệu namesize7463L15I592379356722QX4AM31272356182TTTJ2606983031CTB7Y159519781180X7JCG8556300Tạo một hàm để chuyển đổi kích thước thành KB, MB và GBHàm này nhận một tham số đầu vào(x) và trả về một đối tượng chuỗi Pandas gồm ba giá trị i. e. kích thước được chuyển đổi tính bằng KB, MB và GB 6Sử dụng hàm Áp dụng Pandas để trả về nhiều cộtĐầu tiên, chúng ta sẽ sử dụng pandas. loạt. apply() để áp dụng hàm convert_size() trên cột “size” của khung dữ liệu để chuyển đổi kích thước thành KB, MB và GB bằng cách tạo ba cột mới i. e. 4, 5 và 6 tương ứngChúng tôi đang sử dụng chức năng ma thuật để biết về hiệu suất của gấu trúc. loạt. apply() được sử dụng để tạo ba cột mới trên khung dữ liệu gồm 10 nghìn hàng 7Ngoài. 1. 24 giây ± 60. 9 ms trên mỗi vòng lặp (trung bình ± tiêu chuẩn. nhà phát triển. trong số 7 lần chạy, mỗi lần 1 vòng lặp) Mất khoảng 1. 24 giây để hàm áp dụng trả về nhiều cột này Hãy kiểm tra mẫu của khung dữ liệu và xác minh ba cột mới được tạo (size_kb, size_mb và size_gb) 8namesizesize_kbsize_mbsize_gb7463AFV7822163762164. 432. 110. 006722LYUDP96392609413. 349. 190. 016182RHNAZ1382930213505. 1813. 190. 0131IF6CG99068039674. 619. 450. 011180XBCNC87935058587. 418. 390. 01Sử dụng Vectorization để trả về nhiều cộtHãy tạo 3 cột mới này bằng cách sử dụng phương pháp Vectorization nhưng Vectorization là gì? Vectorization cho phép bạn thực hiện một thao tác trên các mảng mà không có bất kỳ phép lặp nào, lặp lại trên các hàng của khung dữ liệu, trong khi phương thức pandas apply() sử dụng vòng lặp for dưới mui xe. Theo cách tiếp cận Vectorize, một hàm lấy một chuỗi hoặc một loạt đối tượng và đánh giá hàm tùy chỉnh trên từng phần tử của chuỗi đầu vào Bạn có thể thấy ở đây, chúng tôi đang tạo 3 cột mới 4, 5 và 6 bằng cách sử dụng phương pháp vector hóa bằng cách chuyển kích thước cột a pd. Đối tượng sê-ri cho hàm 61 được xác định ở trênGhi chú. Vui lòng tạo lại khung dữ liệu trước khi chạy mã bên dưới để tạo các cột mới bằng Vectorization 0Ngoài. 764 µs ± 76. 6 µs trên mỗi vòng lặp (trung bình ± tiêu chuẩn. nhà phát triển. trong số 7 lần chạy, mỗi lần 1000 vòng) Phải mất 764 micro giây để tạo 3 cột mới đó trên khung dữ liệu gồm 10 nghìn hàng Pandas Áp dụng vs VectorizationNhư vậy là bạn đã thấy mất 1. 24 giây sử dụng chức năng áp dụng để tạo nhiều cột trong khi sử dụng phương pháp Vectorization chỉ mất 764 micro giây. đó là mức tăng hiệu suất gấp 1000 lần. Nó không phải là tuyệt vời? Áp dụng gấu trúc () chậm và dưới mui xe, nó lặp lại trên các hàng của khung dữ liệu, trong khi Vectorization là một cách hiện đại để đánh giá đồng thời một chức năng trên từng phần tử của mảng |