Áp dụng chức năng cho từng ô trong DataFrame


87

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      bar

Tô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 hàm sau để lấy DF tiếp theo:

def foo_bar(x):
    return x.replace('foo', 'wow')

A        B        C
wow      bar      wow bar
bar wow  wow      bar

Có một lớp lót đơn giản có thể áp dụng một hàm cho mỗi ô không?

Đây là một ví dụ đơn giản nên có thể có một cách dễ dàng hơn để thực thi 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à cách áp dụng một hàm trong mọi ô trong khung dữ liệu.


9
Tôi không nghĩ nên chỉnh sửa các câu hỏi thành một câu hoàn toàn mới, khi bạn đã có câu trả lời cho câu cũ vì nó sẽ làm mất hiệu lực của các câu trả lời trước đó. Tôi yêu cầu bạn quay lại câu hỏi ban đầu và hỏi câu hỏi mới một cách riêng biệt.
Nickil Maveli

Câu trả lời:


119

Bạn có thể sử dụng applymap()cái 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     bar

Một tùy chọn khác là vectơ hóa hàm của bạn và sau đó sử dụng applyphương pháp:

import numpy as np
df.apply(np.vectorize(foo_bar))
#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

xin chào, câu hỏi là về việc áp dụng một hàm chứ không phải về việc tìm ra ô nào là chẵn. hãy để tôi xem nếu tôi có thể thay đổi ví dụ để được rõ ràng hơn ..
eljusticiero67

1
Nếu bạn đang tìm kiếm áp dụng một chức năng, bạn có thể làmimport numpy as np; df.apply(np.vectorize(iseven))
Psidom

2
@ eljusticiero67 Bạn có thể sử dụng df.applymap(iseven)nhưng lưu ý rằng nó sẽ trở nên thực sự chậm đối với các DataFrame lớn hơn, vì vậy bất cứ khi nào bạn có cơ hội, hãy sử dụng các phương pháp vector hóa.
ayhan

@ayhan - phương pháp của bạn dường như hoạt động, cả với np.vectorize và không. Bạn có phiền đăng câu trả lời để tôi có thể ghi công cho bạn không?
eljusticiero67 13/09/16

1
Tôi thực sự không đăng nó lúc đầu vì tôi đang cố gắng tìm một bản sao để liên kết nó. Tôi không thể tìm thấy một bản sao chính xác nhưng có thể là cái này ? Nickil Maveli nói đúng, bạn có thể làm rõ ý nghĩa của nó nhưng ít nhất ví dụ cũng nên giống như tôi nghĩ. Có lẽ Psidom có ​​thể chỉnh sửa để bao gồm đề xuất của riêng họ cùng với bản đồ?
ayhan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.