2016-09-13 43 views
12

Tôi có một dataframe rằng có thể trông như thế này:Áp dụng chức năng để mỗi tế bào trong DataFrame

A  B  C 
foo  bar  foo bar 
bar foo foo  bar 

Tôi muốn xem xét thông qua mọi phần tử của mỗi hàng (hay mọi phần tử của mỗi cột) và áp dụng các chức năng sau để có được 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 chức năng cho mỗi ô không?

Đây là một ví dụ đơn giản để có thể dễ dàng thực thi ví dụ cụ thể này hơn là áp dụng hàm, nhưng điều tôi thực sự hỏi là cách áp dụng hàm trong mỗi ô trong một khung dữ liệu.

+2

Tôi không nghĩ đó là một ý tưởng tốt để chỉnh sửa các câu hỏi sang một hoàn toàn mới, một khi bạn đã có câu trả lời cho câu hỏi cũ vì nó sẽ làm mất hiệu lực các câu trả lời trước cho nó. Tôi sẽ 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. –

Trả lời

20

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

lựa chọn khác là vectorize chức năng của bạn và sau đó sử dụng phương pháp apply:

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

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

+0

Nếu bạn đang tìm kiếm áp dụng một hàm, bạn có thể thực hiện 'nhập gọn gàng như np; df.apply (np.vectorize (iseven)) ' – Psidom

+1

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

Các vấn đề liên quan