Tôi có một khung dữ liệu có thể trông như thế này:
A B C foo bar foo bar bar foo foo barTôi muốn xem qua mọi phần tử của mỗi hàng (hoặc mỗi phần tử của mỗi cột) và áp dụng chức năng sau để lấy DF tiếp theo: tiếp theo
def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow barCó một lớp lót đơn giản có thể áp dụng chức năng cho mỗi ô không?
Đây là một ví dụ đơn giản, vì vậy có thể có một cách dễ dàng hơn để thực hiện ví dụ cụ thể này ngoài việc áp dụng một hàm, nhưng điều tôi thực sự hỏi là làm thế nào để áp dụng một chức năng trong mọi ô trong DataFrame.
Hỏi ngày 13 tháng 9 năm 2016 lúc 17:39Sep 13, 2016 at 17:39
eljusticiero67eljusticiero67eljusticiero67
2.0084 Huy hiệu vàng13 Huy hiệu bạc17 Huy hiệu đồng4 gold badges13 silver badges17 bronze badges
1
Bạn có thể sử dụng def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 3 ngắn gọn cho trường hợp của bạn.
df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow barMột tùy chọn khác là vector hóa chức năng của bạn và sau đó sử dụng phương thức def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 4:
import numpy as np df.apply(np.vectorize(foo_bar)) # A B C #0 wow bar wow bar #1 bar wow wow bar
Normanius
7.4625 Huy hiệu vàng46 Huy hiệu bạc78 Huy hiệu đồng5 gold badges46 silver badges78 bronze badges
Đã trả lời ngày 13 tháng 9 năm 2016 lúc 17:42Sep 13, 2016 at 17:42
PsidompsidomPsidom
202K27 Huy hiệu vàng314 Huy hiệu bạc334 Huy hiệu đồng27 gold badges314 silver badges334 bronze badges
9
Tôi đoán bạn có thể sử dụng def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 5:
>>> df[:] = np.vectorize(foo_bar)(df) >>> df A B C foo bar wow bar bar wow wow bar >>>Điều này có thể nhanh hơn, vì nó sử dụng def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 6.
Đã trả lời ngày 14 tháng 10 năm 2021 lúc 9:58Oct 14, 2021 at 9:58
U12-ForwardU12-ForwardU12-Forward
66.6K13 Huy hiệu vàng78 Huy hiệu bạc98 Huy hiệu đồng13 gold badges78 silver badges98 bronze badges
Áp dụng một chức năng dọc theo một trục của DataFrame. Các đối tượng được truyền đến hàm là các đối tượng loạt có chỉ mục là chỉ mục DataFrame (def foo_bar(x):
return x.replace('foo', 'wow')
A B C
wow bar wow bar
bar wow wow bar
7) hoặc các cột DataFrame (def foo_bar(x):
return x.replace('foo', 'wow')
A B C
wow bar wow bar
bar wow wow bar
8). Theo mặc định (def foo_bar(x):
return x.replace('foo', 'wow')
A B C
wow bar wow bar
bar wow wow bar
9), loại trả về cuối cùng được suy ra từ loại trả về của hàm được áp dụng. Mặt khác, nó phụ thuộc vào đối số result_type. Chức năng để áp dụng cho mỗi cột hoặc hàng. Trục cùng với chức năng được áp dụng: 0 hoặc ‘Index, áp dụng chức năng cho mỗi cột. 1 hoặc ‘cột,: Áp dụng chức năng cho mỗi hàng. Xác định nếu hàng hoặc cột được truyền dưới dạng một loạt hoặc đối tượng ndarray: df.applymap(foo_bar)
# A B C
#0 wow bar wow bar
#1 bar wow wow bar
0: Chuyển từng hàng hoặc cột dưới dạng chuỗi cho hàm. df.applymap(foo_bar)
# A B C
#0 wow bar wow bar
#1 bar wow wow bar
1: Hàm được truyền sẽ nhận các đối tượng Ndarray thay thế. Nếu bạn chỉ áp dụng chức năng giảm Numpy, điều này sẽ đạt được hiệu suất tốt hơn nhiều. Những điều này chỉ hành động khi def foo_bar(x):
return x.replace('foo', 'wow')
A B C
wow bar wow bar
bar wow wow bar
8 (cột): Mở rộng, kết quả giống như danh sách sẽ được biến thành các cột. Giảm giá: Trả về một loạt nếu có thể thay vì mở rộng kết quả giống như danh sách. Điều này trái ngược với ‘mở rộng. ‘Phát sóng: Kết quả sẽ được phát theo hình dạng ban đầu của DataFrame, chỉ mục và cột ban đầu sẽ được giữ lại. Hành vi mặc định (không có) phụ thuộc vào giá trị trả về của hàm được áp dụng: kết quả giống như danh sách sẽ được trả về dưới dạng một loạt trong số đó. Tuy nhiên, nếu chức năng áp dụng trả về một chuỗi, chúng được mở rộng thành các cột. Đối số vị trí để chuyển sang Func ngoài mảng/sê -ri.
Rawbool, mặc định saibool, default False
result_type {‘mở rộng,‘ giảm, ’phát sóng, không}, không có mặc định{‘expand’, ‘reduce’, ‘broadcast’, None}, default None
Các đối số từ khóa bổ sung để truyền dưới dạng từ khóa đối số cho func.
ReturnSseries hoặc dataFrameKết quả của việc áp dụng df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow bar 3 dọc theo trục đã cho của DataFrame.
Ghi chú
Các chức năng làm đột biến đối tượng được truyền có thể tạo ra hành vi hoặc lỗi bất ngờ và không được hỗ trợ. Xem đột biến với các phương thức hàm do người dùng (UDF) để biết thêm chi tiết.Mutating with User Defined Function (UDF) methods for more details.
Ví dụ
>>> df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B']) >>> df A B 0 4 9 1 4 9 2 4 9
Sử dụng hàm phổ quát không có gì (trong trường hợp này giống như df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow bar 4):
>>> df.apply(np.sqrt) A B 0 2.0 3.0 1 2.0 3.0 2 2.0 3.0
Sử dụng chức năng giảm trên một trong hai trục
>>> df.apply(np.sum, axis=0) A 12 B 27 dtype: int64
>>> df.apply(np.sum, axis=1) 0 13 1 13 2 13 dtype: int64
Trả lại một danh sách giống như sẽ dẫn đến một loạt
>>> df.apply(lambda x: [1, 2], axis=1) 0 [1, 2] 1 [1, 2] 2 [1, 2] dtype: object
Vượt qua df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow bar 5 sẽ mở rộng kết quả giống như danh sách cho các cột của DataFrame
def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 0
Trả về một chuỗi bên trong hàm tương tự như vượt qua df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow bar 5. Các tên cột kết quả sẽ là chỉ số loạt.
def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 1
Vượt qua df.applymap(foo_bar) # A B C #0 wow bar wow bar #1 bar wow wow bar 7 sẽ đảm bảo kết quả hình dạng tương tự, cho dù là danh sách hay vô hướng được trả lại bởi hàm và phát nó dọc theo trục. Tên cột kết quả sẽ là bản gốc.
def foo_bar(x): return x.replace('foo', 'wow') A B C wow bar wow bar bar wow wow bar 2