Подтвердить что ты не робот

Python pandas: применить функцию с аргументами к ряду

Я хочу применить функцию с аргументами к ряду в python pandas:

x = my_series.apply(my_function, more_arguments_1)
y = my_series.apply(my_function, more_arguments_2)
...

Документация описывает поддержку метода apply, но не принимает никаких аргументов. Есть ли другой метод, который принимает аргументы? В качестве альтернативы, я пропустил простой обходной путь?

Обновление (октябрь 2017 г.): Обратите внимание, что поскольку этот вопрос изначально был запрошен, чтобы pandas apply() был обновлен для обработки аргументов positional и keyword, а ссылка на документацию выше отражает это и показывает как включить любой тип аргумента.

4b9b3361

Ответ 1

Документация объясняет это четко. Метод apply принимает функцию python, которая должна иметь один параметр. Если вы хотите передать больше параметров, вы должны использовать functools.partial, как предложил Джоэл Корнетт в своем комментарии.

Пример:

>>> import functools
>>> import operator
>>> add_3 = functools.partial(operator.add,3)
>>> add_3(2)
5
>>> add_3(7)
10

Вы также можете передавать аргументы ключевого слова с помощью partial.

Другой способ - создать лямбда:

my_series.apply((lambda x: your_func(a,b,c,d,...,x)))

Но я думаю, что лучше использовать partial.


Обратите внимание, что более новые версии pandas позволяют вам передавать дополнительные аргументы (см. новую документацию). Итак, теперь вы можете сделать:

my_series.apply(your_function, args=(2,3,4), extra_kw=1)

Позиционные аргументы добавляются после элемента серии.

Ответ 2

Series.apply(func, convert_dtype=True, args=(), **kwds)

args : tuple

x = my_series.apply(my_function, args = (arg1,))

Ответ 3

Шаги:

  • Создание фрейма данных
  • Создать функцию
  • Использовать именованные аргументы функции в инструкции apply.

Пример

x=pd.DataFrame([1,2,3,4])  

def add(i1, i2):  
    return i1+i2

x.apply(add,i2=9)

Результатом этого примера является то, что каждое число в фрейме будет добавлено к номеру 9.

    0
0  10
1  11
2  12
3  13

Объяснение:

Функция "добавить" имеет два параметра: i1, i2. Первым параметром будет значение в кадре данных, а второе - это то, что мы передаем в функцию "применить". В этом случае мы передаем "9" в функцию apply, используя аргумент ключевого слова "i2".

Ответ 4

Вы можете передать любое количество аргументов функции, которую apply вызывает через неименованные аргументы, переданные как кортеж в параметр args, или через другие аргументы ключевых слов, встроенные внутри словаря kwds параметр.

Например, создайте функцию, возвращающую значение True для значений между 3 и 6, а False - в противном случае.

s = pd.Series(np.random.randint(0,10, 10))
s

0    5
1    3
2    1
3    1
4    6
5    0
6    3
7    4
8    9
9    6
dtype: int64

s.apply(lambda x: x >= 3 and x <= 6)

0     True
1     True
2    False
3    False
4     True
5    False
6     True
7     True
8    False
9     True
dtype: bool

Эта анонимная функция не очень гибкая. Пусть создана нормальная функция с двумя аргументами для управления минимальными и максимальными значениями, которые мы хотим в нашей серии.

def between(x, low, high):
    return x >= low and x =< high

Мы можем реплицировать вывод первой функции, передавая неназванные аргументы в args:

s.apply(between, args=(3,6))

Или мы можем использовать именованные аргументы

s.apply(between, low=3, high=6)

Или даже комбинация обоих

s.apply(between, args=(3,), high=6)