Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách áp dụng hàm theo từng phần tử (element-wise) trong DataFrame Python

Đôi khi cần áp dụng một số hàm dọc theo các phần tử của DataFrame. Không phải tất cả hàm đều có thể vector hóa (vectorised). Đây là lúc hàm applymap xuất hiện.

Hàm này nhận một giá trị đơn làm đầu vào và trả về một giá trị đơn làm đầu ra.

Ví dụ

import pandas as pd
import numpy as np

my_df = pd.DataFrame(
    np.random.randn(5, 5),
    columns=['col_1', 'col_2', 'col_3', 'col_4', 'col_5']
)

print("DataFrame được tạo:")
print(my_df)

# applymap áp dụng lambda cho từng phần tử
result = my_df.applymap(lambda x: x * 11.45)
print("Sau khi dùng applymap (nhân 11.45):")
print(result)

# apply áp dụng hàm cho từng cột (mặc định axis=0)
print("Trung bình từng cột (apply np.mean):")
print(my_df.apply(np.mean))

Đầu ra

DataFrame được tạo:
       col_1     col_2     col_3     col_4     col_5
0 -0.671510 -0.860741  0.886484  0.842158  2.182341
1 -1.355763  0.247240 -0.653630 -0.278095  0.163044
2 -0.816203  1.664006  1.555648  1.625890 -0.412338
3 -1.013273 -1.565076  1.297014 -0.303504 -1.623573
4  0.725949 -0.077588 -0.886957  0.433478 -0.300151

Sau khi dùng applymap (nhân 11.45):
       col_1     col_2     col_3     col_4     col_5
0 -7.688790 -9.855484 10.150242  9.642709 24.987804
... (các giá trị khác)

Trung bình từng cột (apply np.mean):
col_1   -0.626160
col_2   -0.118432
col_3    0.439712
col_4    0.463985
col_5    0.001865
dtype: float64

Giải thích

  • Nhập thư viện cần thiết, đặt bí danh để dễ dùng.
  • Tạo DataFrame bằng hàm random.randn với 5 hàng 5 cột.
  • Đặt tên cột trong danh sách khi định nghĩa DataFrame.
  • In DataFrame ra console.
  • Áp dụng hàm applymap cho từng phần tử DataFrame.
  • Định nghĩa hàm là lambda function viết bên trong applymap.
  • In dữ liệu ra console.

Phân biệt:

  • applymap(func) - Áp dụng func cho từng phần tử (element-wise)
  • apply(func, axis=0) - Áp dụng func cho từng cột (mặc định)
  • apply(func, axis=1) - Áp dụng func cho từng hàng
  • df.map(func) - (Pandas 2.1+) Thay thế cho applymap trên Series/DataFrame