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.partial
Joel 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)
위치 인수는 시리즈의 요소 뒤에 추가됩니다 .
단계 :
- 데이터 프레임 생성
- 함수 만들기
- 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)
'Programing' 카테고리의 다른 글
JavaScript 정적 분석 도구가 있습니까? (0) | 2020.08.08 |
---|---|
표준 Scala 클래스를 사용하여 Scala에서 JSON을 구문 분석하는 방법은 무엇입니까? (0) | 2020.08.08 |
npm 설치 오류 (오류 : ENOENT, chmod) (0) | 2020.08.07 |
지정된 수의 문자를 읽는 Linux 명령 (예 : cat) (0) | 2020.08.07 |
인라인 함수와 전 처리기 매크로 (0) | 2020.08.07 |