Застосувати функцію до кожної комірки в 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
Я не думаю, що це гарна ідея редагувати запитання на абсолютно нове, як тільки ви вже отримаєте відповіді на старе, оскільки це призведе до втрати попередніх відповідей на нього. Я б попросив вас відмовитись від початкового питання та задати нове окремо.
Нікіл Мавелі

Відповіді:


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)але зауважте, що для великих фреймів даних це стане дуже повільним, тому, коли у вас є можливість, використовуйте векторизовані методи.
ayhan

@ayhan - ваш метод, здається, працює як з np.vectorize, так і без. Не могли б Ви опублікувати відповідь, щоб я міг надати Вам кредит?
eljusticiero67

1
Я насправді не публікував його спочатку, тому що намагався знайти дублікат, на який це посилання. Я не зміг знайти точний дублікат, але, можливо, цей ? Нікіл Мавелі, правда, правда, ви можете пояснити значення, але принаймні приклад повинен бути таким же, я думаю. Можливо, Psidom може редагувати, включаючи власну пропозицію разом із картою застосування?
Айхан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.