파이썬

pandas 패키지 FutureWarning 해결하기

NCOOKIE_ 2022. 6. 2. 17:15

책에 있는 예제 코드를 가지고 내 입맛에 맞게 이리저리 수정하던 도중, for 루프를 돌 때마다 프린트되는 warning 메세지가 신경쓰여서 찾아보았다.

FutureWarning: In a future version of pandas all arguments of concat except for the argument 'objs' will be keyword-only.

라는 경고 메세지였는데 처음 보는 것이어서 의아해했다. 찾아보니 함수의 positional argument와 keywork argument를 혼동해서 사용하는게 문제더라. 파이썬 코어 단에서 경고하는건 아니고, 파이썬의 써드파티인 pandas 패키지에서 추후 이런 식으로 arguments를 혼용하는 것을 허용치 않을 것이기에 이런 식으로 표시해주는 것 같다.

 

내가 작성했던 기존 코드는 

df = pd.concat([df, temp], 0)

이었는데, 아래 코드로 바꿔주니까 더 이상 경고 메세지를 뿜지 않았다.

df = pd.concat([df, temp], axis=0)

 

이에 대해 조금만 더 자세히 알아보자.

 

 

위치 인자와 키워드 인자

아래와 같은 함수가 있다고 하자

def foo(a, b, c):
	pass

 

위치 인자(positional arguments)를 사용하여 함수를 호출하려면 다음과 같이 할 수 있다.

foo(1, 2, 3)

 

키워드 인자(keywork arguments)를 사용하려면 이렇게 될테고

foo(a=1, b=2, c=3)

 

또 이 두 가지 방식을 혼용해서 사용하려면 다음과 같이 할 수 있다.

foo(a=1, 2, c=3)

 

/ 와 * 을 이용하여 구분

이건 나도 블로그 글을 쓰려고 조사하면서 알게 된 내용이다. 파이썬에서 함수 인자 사이에  나  을 사용하기도 하는데 이들 사이에 있는 인자들의 위치에 따라 위치 인자인지, 키워드 인자인지 정할 수 있다.

 

  앞에 있는 함수 인자들은 위치 인자로만 사용 가능하고,   이후에 있는 인자들은 키워드 인자로만 사용이 가능하다. 그리고 이 둘 사이에 있는 인자는 위치 인자와 키워드 인자 모두로 사용이 가능하다.

 

코드를 예로 들어보자.

def foo(a, /, b, *, c)

 

foo 함수에서 a는 위치 인자로만 사용이 가능하다. 슬래시(/) 앞에 위치해있기 때문이다. c는 키워드 인자로만 사용이 가능하고, b는 위치 인자와 키워드 인자 둘 모두 사용 가능하다.

 

그렇기 때문에 아래 코드는 에러가 발생하게 된다.

foo(1, 2, 3)       # will fail
foo(a=1, b=2, c=3) # will fail
# 에러 예시
TypeError: foo() takes 2 positional arguments but 3 were given

 

다음 코드는 b가 위치와 키워드 인자 둘 모두 사용 가능하기 때문에 정상적으로 동작한다.

foo(1, 2, c=3)     # fine
foo(1, b=2, c=3)   # fine

 

 

 

자, 그럼 원점으로 돌아와보자. 'FutureWarning'은 무엇을 의미하는 것일까.

 

당장 지금은 문제될 것도 없고 정상적으로 동작할 수 있다. 그러나 지금 내가 사용 중인 pandas 패키지에서 추후 obj 매개변수를 제외한 나머지 것들에는 키워드 인자를 의무적으로 붙이도록 계획 중이기 때문에 위와 같은 메세지가 뜨는 것이다. 그렇기 때문에 두 번째 인자 앞에 'axis='만 붙여줘도 문제가 해결되었던 것이고.

 

물론 이건 파이썬 자체에서 계획 중인게 아니라 써드파티인 pandas 패키지의 정책이기긴 하지만, 앞으로 코드를 작성할 때 위와 같은 부분이 혼동되지 않도록 주의하도록 하자.

 

 

 

참고링크

Why do I get a 'FutureWarning' with pandas.concat?

 

Why do I get a 'FutureWarning' with pandas.concat?

Does anyone meet this similar FutureWarning? I got this when I was using Tiingo+pandas_datareader? The warning is like: python3.8/site-packages/pandas_datareader/tiingo.py:234: FutureWarning: In a ...

stackoverflow.com

파이썬 - 함수의 파라미터(매개변수)의 특징 알아보기

 

파이썬 - 함수의 파라미터(매개변수)의 특징 알아보기

파이썬의 함수 파라미터에는 Positional Arguments와 Keyword Arguments 두 가지 방식이 있습니다. Positional Arguments(위치 인자) Positional Arguments는 가장 기본적인 함수의 파라미터 형태로, 말 그대로 위치에

velog.io

What does the slash (/) in the parameter list of a function mean in Python?

 

What does the slash (/) in the parameter list of a function mean in Python?

Answer: Parameters listed before a slash in the parameter list are positional-only parameters just as parameters listed after a [code ]*[/code] on its own are keyword-only. Parameters between the two may be given either as positional or keyword. [code]def

www.quora.com