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
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]
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ộ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 đó
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ướiimport 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
- 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
- Xây dựng hàm chuyển dung lượng sang Kilobytes[kb], Megabytes[MB] và Gigabytes[GB]
- 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
- 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
- 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
- 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
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à 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
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.
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 ứ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
a b c d
0 5 6 7 8
1 1 9 12 14
2 4 8 10 6
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]
a b c d
0 5 6 7 8
1 1 9 12 14
2 4 8 10 6
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ộ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ê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
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]
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 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