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ụ

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']]

đầu ra

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6

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 Pandas

Phương thức

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 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ố
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]
3 là 0 cho hàng và 1 cho cột

Trong 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 đó

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]

đầu ra

The original dataframe:
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
The new dataframe:
   a   b   c   d
0  6   7   8   9
1  2  10  13  15
2  5   9  11   7

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

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']]

print["The original dataframe:"]
print[df]

def func[x]:
    return x[0] + x[1]

df['e']  = df.apply[func, axis = 1]

print["The new dataframe:"]
print[df]

đầu ra

The original dataframe:
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
The new dataframe:
   a  b   c   d   e
0  5  6   7   8  11
1  1  9  12  14  10
2  4  8  10   6  12

Cột

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
0 mới được thêm vào là tổng dữ liệu trong cột
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
1 và
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
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

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']]

print["The original dataframe:"]
print[df]

df['e']  = df.apply[lambda x: x.a+x.b, axis = 1]

print["The new dataframe:"]
print[df]

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

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
3 tại đây.
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
4 và
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
5 đề cập đến cột
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
1 và
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
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

  1. Tạo một khung dữ liệu với 10K hàng và hai cột tên và kích thước [byte] tương ứng
  2. Xây dựng hàm chuyển dung lượng sang Kilobytes[kb], Megabytes[MB] và Gigabytes[GB]
  3. sử dụng gấu trúc. Loạt. apply[] để áp dụng hàm được tạo ở Bước # 2 ở trên để tạo ba cột mới size_kb, size_mb và size_gb tương ứng
  4. Sử dụng phương pháp Vectorization để áp dụng hàm được tạo ở Bước # 2 ở trên để tạo ba cột mới size_kb, size_mb và size_gb tương ứng
  5. So sánh hiệu suất của gấu trúc. Loạt. apply[] và Vectorization để áp dụng một hàm trên khung dữ liệu và nhận ba cột mới
  6. Tại sao gấu trúc. apply[] chậm hơn và người ta phải luôn sử dụng Vectorization để làm việc với tập dữ liệu lớn

Bắt đầu nào

Tạo một khung dữ liệu

Hã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]

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
5

Hãy trực quan hóa mẫu có kích thước 5 từ khung dữ liệu

namesize7463L15I592379356722QX4AM31272356182TTTJ2606983031CTB7Y159519781180X7JCG8556300

Tạo một hàm để chuyển đổi kích thước thành KB, MB và GB

Hà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

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
6

Sử 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.

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]
4,
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]
5 và
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]
6 tương ứng

Chú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

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
7

Ngoà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]

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
8

namesizesize_kbsize_mbsize_gb7463AFV7822163762164. 432. 110. 006722LYUDP96392609413. 349. 190. 016182RHNAZ1382930213505. 1813. 190. 0131IF6CG99068039674. 619. 450. 011180XBCNC87935058587. 418. 390. 01

Sử dụng Vectorization để trả về nhiều cột

Hã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

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]
4,
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]
5 và
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]
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
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
61 được xác định ở trên

Ghi 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

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]
0

Ngoà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 Vectorization

Như 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

Chủ Đề