DataFrame의 각 셀에 기능 적용


87

다음과 같은 데이터 프레임이 있습니다.

A        B        C
foo      bar      foo bar
bar foo  foo      bar

각 행의 모든 ​​요소 (또는 각 열의 모든 요소)를 살펴보고 다음 함수를 적용하여 후속 DF를 얻고 싶습니다.

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

A        B        C
wow      bar      wow bar
bar wow  wow      bar

각 셀에 함수를 적용 할 수있는 간단한 한 줄이 있습니까?

이것은 단순한 예이므로 함수를 적용하는 것 외에이 특정 예를 실행하는 더 쉬운 방법이있을 수 있지만 제가 정말로 묻고있는 것은 데이터 프레임 내의 모든 셀에 함수를 적용하는 방법입니다.


9
이전 질문에 대한 답변을 이미 얻은 경우 질문에 대한 이전 답변이 무효화되므로 질문을 완전히 새로운 질문으로 편집하는 것은 좋은 생각이 아닙니다. 원래 질문을 롤백하고 새 질문을 별도로 요청합니다.
Nickil Maveli

답변:


119

귀하 applymap()의 경우에 간결한 것을 사용할 수 있습니다 .

df.applymap(foo_bar)

#     A       B       C
#0  wow     bar wow bar
#1  bar wow wow     bar

또 다른 옵션은 함수를 벡터화 한 다음 apply메서드 를 사용 하는 것입니다.

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

안녕하세요, 문제는 실제로 어떤 셀이 짝수인지 알아내는 것이 아니라 함수를 적용하는 것이 었습니다. .. 내가 명확하게하기 위해 예를 변경할 수있는 경우 나 보자
eljusticiero67

1
기능 적용을 찾고 있다면 할 수 있습니다import numpy as np; df.apply(np.vectorize(iseven))
Psidom

2
@ eljusticiero67 사용할 수는 df.applymap(iseven)있지만 더 큰 DataFrame의 경우 속도가 매우 느려지므로 기회가있을 때마다 벡터화 된 방법을 사용하십시오.
ayhan

@ayhan-귀하의 방법은 np.vectorize를 사용하거나 사용하지 않고 모두 작동하는 것 같습니다. 내가 당신에게 크레딧을 줄 수 있도록 답변을 게시 해 주시겠습니까?
eljusticiero67

1
나는 이것을 링크 할 중복을 찾으려고했기 때문에 처음에는 그것을 게시하지 않았습니다. 나는 정확한 중복을 찾을 수 없었지만 아마도 이것 일까요? Nickil Maveli가 맞지만 의미를 명확히 할 수는 있지만 적어도 예는 제 생각과 동일해야합니다. 아마도 Psidom은 applymap과 함께 자신의 제안을 포함하도록 편집 할 수 있습니까?
ayhan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.