Hướng dẫn dùng pandas mapper python

  1. Trang Chủ
  2. Python

Lời tựa

Khi chúng tôi xử lý đối tượng DataFrame, suy nghĩ tiềm thức về việc đi qua DataFrame, sau đó điền vào các giá trị xử lý trong DataFrame. Thời gian dài hơn. Pandas Các công cụ được xây dựng trong một công cụ được xây dựng có thể thực hiện xử lý chức năng map, apply và applymap.

Mẹo: Để giải quyết vấn đề một cách thuận tiện và nhanh chóng, bài viết này chỉ giới thiệu cách sử dụng chính của các chức năng, không phải là một giới thiệu toàn diện

1. pandas.Series.map () là gì?

Thực hiện các giá trị trong Series Từng người một, mang vào hàm, từ điển hoặc Series Một giá trị khác.

Series.map(arg, na_action=None)

tham số:

arg: Hàm, dữ liệu từ điển, Series; Ánh xạ thư từ

na_action{None, 'ignore'}: Mặc định None; Điều trị NaN các biến. Nếu None không được xử lý, đối tượng NaN không được xử lý.

Trả về Series

Thứ hai, pandas.Series.map () sử dụng và lợi thế

Phần này chủ yếu mô tả việc sử dụng chính của hàm map () và các lợi thế của phương pháp so với phương pháp

1.map () sử dụng

Tạo trường hợp DataFrame

import pandas as pd
import numpy as np
import time
data = pd.DataFrame({'name':['Verne Raymond','Chapman Becher','Patrick George','Saxon MacArthur',
'Joshua Marjory','Luther Pigou','Fanny Agnes','Karen Bush','Elaine Whitman'],
'gender':[0,1,0,0,1,1,1,0,1],'first_name':np.nan,'last_name':np.nan})
print(data)
name  gender  first_name  last_name

0 Verne Raymond 0 NaN NaN

1 Chapman Becher 1 NaN NaN

2 Patrick George 0 NaN NaN

3 Saxon MacArthur 0 NaN NaN

4 Joshua Marjory 1 NaN NaN

5 Luther Pigou 1 NaN NaN

6 Fanny Agnes 1 NaN NaN

7 Karen Bush 0 NaN NaN

8 Elaine Whitman 1 NaN NaN

Bây giờ bạn cần đặt các cột name và tên họ và tên để tháo rời chúng trong first_name và last_name, sử dụng hàm map () và tính toán thời gian sử dụng thời gian sử dụng.

def first_name_map(x):
return x.split(' ')[0]
def last_name_map(x):
return x.split(' ')[1]
data['first_name'] = data['name'].map(first_name_map)
data['last_name'] = data['name'].map(last_name_map)
print('use time:'+str(end-start))
print(data)
use time:0.0009970664978027344

name gender first_name last_name

0 Verne Raymond 0 Verne Raymond

1 Chapman Becher 1 Chapman Becher

2 Patrick George 0 Patrick George

3 Saxon MacArthur 0 Saxon MacArthur

4 Joshua Marjory 1 Joshua Marjory

5 Luther Pigou 1 Luther Pigou

6 Fanny Agnes 1 Fanny Agnes

7 Karen Bush 0 Karen Bush

8 Elaine Whitman 1 Elaine Whitman

Nếu bạn muốn thay thế mã giới tính 0, 1 thành tiếng Trung Male và Female, bạn có thể sử dụng chức năng ánh xạ từ điển, như sau

data['gender'] = data['gender'].map({0:'Female',1:'Male'})
print(data)
name  gender first_name  last_name

0 Verne Raymond Female Verne Raymond

1 Chapman Becher Male Chapman Becher

2 Patrick George Female Patrick George

3 Saxon MacArthur Female Saxon MacArthur

4 Joshua Marjory Male Joshua Marjory

5 Luther Pigou Male Luther Pigou

6 Fanny Agnes Male Fanny Agnes

7 Karen Bush Female Karen Bush

8 Elaine Whitman Male Elaine Whitman

2.map () lợi thế so với các phương pháp khác

Phương pháp chung chủ yếu là thuận tiện và nhanh chóng. Ví dụ sau so sánh. Tốc độ sử dụng phương pháp map () đã được tính toán ở trên: 0,0009970664978027344

Truyền thống

start = time.time()
for index,rows in data.iterrows():
data['first_name'][index] = rows['name'].split(' ')[0]
data['last_name'][index] = rows['name'].split(' ')[1]
end = time.time()
print('use time:'+str(end-start))
use time:0.5146446228027344

Bạn có thể thấy rằng việc sử dụng phương pháp map () nhanh hơn 500 lần so với việc sử dụng đường truyền trực tiếp

list Phương pháp lưu trữ tạm thời

start = time.time()
first_name = []
last_name = []
for index,rows in data.iterrows():
first_name.append(rows['name'].split(' ')[0])
last_name.append(rows['name'].split(' ')[1])
data['first_name'] = first_name
data['last_name'] = last_name
end = time.time()
print('use time:'+str(end-start))
use time:0.001994609832763672

Có thể thấy rằng việc sử dụng phương pháp tạm thời list nhanh hơn 250 lần so với Traverser, nhưng nó vẫn chậm hơn một nửa so với phương pháp map

Hàm thứ hai, apply ()

Việc sử dụng apply () tương tự như phương pháp sử dụng của map (), nhưng apply () Ngoài các tham số Series, bạn cũng có thể vượt qua các tham số bổ sung.

Series.apply(func,convert_dtype = True,args = (), **kwds)

tham số:

func: Tên chức năng

convert_dtype:bool giá trị lớp, mặc định True; Cố gắng tìm loại dữ liệu phù hợp nhất. Nếu False dtype=object.

args: Nhóm Yuan; Truyền thông tin tham số vị trí sau Series

** kwds: Để chuyển các tham số khác cho hàm (dưới dạng từ điển)

Trở lại Series hoặc DataFrame

Sau đây là trường hợp (tham khảo trường hợp tài liệu chính thức)

s = pd.Series([20, 21, 12],index=['London', 'New York', 'Helsinki'])
print(s)
London      20

New York 21

Helsinki 12

dtype: int64

Xử lí dữ liệu

def subtract_custom_value(x, custom_value):
return x - custom_value
s.apply(subtract_custom_value, args=(5,))
London      15

New York 16

Helsinki 7

dtype: int64

Sử dụng các tham số ** kwds

def subtract_custom_value(x, **kwds):
for key in kwds:
x -= kwds[key]
return x
s.apply(subtract_custom_value, num = 5)
London      15

New York 16

Helsinki 7

dtype: int64

Thứ ba, applymap () sử dụng chức năng

applymap () Đối tượng của xử lý hàm là DataFrame, không Series. Nó không được sử dụng nhiều trong hai chức năng trước đó, nhưng nó cũng hữu ích trong một số trường hợp.

DataFrame.applymap(func)

tham số:

func: Hàm; Hàm Python được gọi, đầu vào và đầu ra là các giá trị đơn

Quay lại DataFrame

Sau đây là một trường hợp đơn giản:

import pandas as pd
import numpy as np
data = pd.DataFrame(
{
"A":np.random.randn(3),
"B":np.random.randn(3),
"C":np.random.randn(3),
}
)
print(data )
A         B         C

0 2.128483 -1.701311 -1.362955

1 -1.149937 1.108856 -0.259637

2 -0.076621 -0.379672 -2.636464

Tính toán tất cả các ô vuông:

data.applymap(lambda x: x**2)
A         B         C

0 4.530439 2.894459 1.857645

1 1.322356 1.229561 0.067411

2 0.005871 0.144151 6.950940

Tóm tắt

Bài viết này cho thấy phương pháp Pandas ánh xạ dữ liệu vào hàm theo từng lô nhanh chóng. Nó chủ yếu sử dụng Pandas map, apply và applymap Nhanh hơn các chu kỳ thông thường, theo dõi -UP cũng sẽ giới thiệu nhiều kỹ thuật xử lý dữ liệu hơn.