7

Разница между методами map, applymap и apply в Pandas

33

Можете ли вы объяснить, когда использовать эти методы векторизации с простыми примерами?

Я вижу, что map — это метод Series, тогда как остальные методы относятся к DataFrame. Я запутался в отношении методов apply и applymap. Почему у нас есть два метода для применения функции к DataFrame? Буду признателен за простые примеры, которые прояснят их назначение!

4 ответ(ов)

0

@jeremiahbuddha правильно указал, что метод apply применяет функцию к строкам или столбцам DataFrame, в то время как applymap применяется к каждому элементу. Однако, как вы заметили, использование apply для элемент-wise вычислений также возможно, хотя это может не быть его основным назначением.

В приведенном вами примере frame.apply(np.sqrt) и frame.applymap(np.sqrt) дают одинаковые результаты, потому что функция np.sqrt может быть применена и к целым столбцам, и к отдельным элементам. Однако следует помнить, что при использовании apply на DataFrame, в зависимости от параметров, функция может быть применена по строкам или по столбцам, что может привести к различиям в поведении, особенно когда функция не является элемент-wise.

Таким образом, в общем случае для элемент-wise вычислений предпочтительнее использовать applymap, так как он явно предназначен для этой задачи и работает быстрее для DataFrame. Но иногда применение apply может привести к нужному результату, как в вашем случае с np.sqrt.

0

Самое простое объяснение разницы между apply и applymap:

apply принимает всю колонку в качестве параметра и затем присваивает результат этой колонке.

applymap, в свою очередь, принимает отдельное значение ячейки как параметр и присваивает результат обратно в эту ячейку.

Обратите внимание, что если apply возвращает единственное значение, вы получите это значение вместо колонки после присвоения, и в конечном итоге у вас будет лишь строка вместо матрицы.

0

Хотел бы обратить внимание на один момент, с которым я немного повозился.

Если у вас есть функция:

def f(x):
    if x < 0:
        x = 0
    elif x > 100000:
        x = 100000
    return x

И вы применяете её на датафрейме с помощью applymap:

df.applymap(f)
df.describe()

Имейте в виду, что это не изменяет сам датафрейм. Вам нужно переопределить его, чтобы изменения вступили в силу:

df = df.applymap(f)
df.describe()

Таким образом, в последнем случае df будет содержать обновлённые значения.

0

Мое понимание:

С точки зрения функции:

Если функция должна сравнивать переменные в колонках или строках, используйте apply.

Например: lambda x: x.max() - x.mean().

Если функция должна применяться к каждому элементу:

  1. Если нужно работать с колонкой или строкой, используйте apply.

  2. Если необходимо применить к всему DataFrame, используйте applymap.

Пример:

majority = lambda x: x > 17
df2['legal_drinker'] = df2['age'].apply(majority)

def times10(x):
    if isinstance(x, int):
        x *= 10 
    return x

df2.applymap(times10)

Такой подход помогает выбирать правильный метод в зависимости от того, как вы хотите обрабатывать данные.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь