Programing

python pandas : 인수가있는 함수를 계열에 적용

crosscheck 2020. 8. 7. 08:00
반응형

python pandas : 인수가있는 함수를 계열에 적용


Python pandas의 시리즈에 인수가있는 함수를 적용하고 싶습니다.

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

문서는 방법을 적용에 대한 지원을 설명하지만, 인수를 허용하지 않습니다. 인수를 받아들이는 다른 방법이 있습니까? 또는 간단한 해결 방법이 누락 되었습니까?

업데이트 (2017 년 10 월) : 이 질문은 원래 apply()위치 및 키워드 인수를 처리하기 위해 pandas 가 업데이트되었으며 위의 문서 링크가이를 반영하고 두 유형의 인수를 포함하는 방법을 보여줍니다.


문서는 이것을 명확하게 설명합니다. apply 메소드는 단일 매개 변수가 있어야하는 파이썬 함수를받습니다. 더 많은 매개 변수를 전달하려면 functools.partialJoel Cornett이 의견에서 제안한대로 사용해야합니다 .

예를 들면 :

>>> 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)

위치 인수는 시리즈의 요소 뒤에 추가됩니다 .


단계 :

  1. 데이터 프레임 생성
  2. 함수 만들기
  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의 두 가지 매개 변수가 있습니다. 첫 번째 매개 변수는 데이터 프레임의 값이고 두 번째 매개 변수는 "적용"함수에 전달하는 값입니다. 이 경우 키워드 인자 "i2"를 사용하여 "9"를 적용 함수에 전달합니다.


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

args : tuple

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

apply이름이 지정되지 않은 인수를 통해 호출 args되거나 매개 변수에 튜플로 전달 되거나 kwds매개 변수에 의해 사전으로 내부적으로 캡처 된 다른 키워드 인수를 통해 호출 되는 함수에 원하는 수의 인수를 전달할 수 있습니다 .

예를 들어 3과 6 사이의 값에 대해 True를 반환하고 그렇지 않으면 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

This anonymous function isn't very flexible. Let's create a normal function with two arguments to control the min and max values we want in our Series.

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

We can replicate the output of the first function by passing unnamed arguments to args:

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

Or we can use the named arguments

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

Or even a combination of both

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

참고URL : https://stackoverflow.com/questions/12182744/python-pandas-apply-a-function-with-arguments-to-a-series

반응형