해결된 질문
작성
·
903
0
groupby를 사용하면 에러는 아니고 경고가 뜹니다.
FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
chatGPT:
이 경고는 Pandas의 value_counts()
메서드를 사용할 때 발생하는 것으로 보입니다. 이 경고는 현재 버전의 Pandas에서는 observed
매개변수의 기본값이 False
이지만, 향후 버전에서는 True
로 변경될 것이라는 것을 알려주는 것입니다. 즉, 향후에는 observed=False
를 명시적으로 지정하지 않으면 경고가 표시될 것입니다.
이러한 경고를 피하려면 value_counts()
를 호출할 때 observed=False
를 명시적으로 전달하면 됩니다. 예를 들어:
import pandas as pd
# 예제 데이터프레임 생성
df = pd.DataFrame({'Category': ['A', 'B', 'A', 'C', 'B', 'A']})
# value_counts() 호출 시 observed 매개변수 명시
counts = df['Category'].value_counts(observed=False)
print(counts)
이렇게 하면 경고가 발생하지 않습니다. 하지만 향후 Pandas 버전에서는 이러한 변경이 기본 동작이 되므로 observed
매개변수를 사용하여 코드를 업데이트하는 것이 좋습니다.
-> 근데 이게 무슨 말인지 모르겠습니다!
뭐... 대충 업데이트 할 건데, 오류가 생길 수 있으니 미리 대비를 해라~ 이런 거 같은데 정확히 무슨 뜻인지 모르겠습니다!
답변 1
0
안녕하세요.
Pandas groupby 메서드를 사용할 때 질문주신 것과 같이 observed 관련 warning이 뜨는 것은 챗 GPT가 설명해 준 것과 같이 후속 Pandas 버전에서는 observed 인자의 값이 True가 기본값이 된다는 뜻입니다. ^^
범주형 변수를 groupby 메서드로 그룹화 할 때 observed 인자 값이 True이면 관측되는 데이터들만 표시해 주고, False이면 관측되지 않더라도 결과에 포함하여 나타내 주게 됩니다. 아래 예시 코드 블럭을 참고해 보시기 바랍니다. observed가 False일 경우 state가 AK, gender가 F인 경우도 0이라는 값으로 결과를 나타내 주지만, True일 경우 그렇지 않은 것을 볼 수 있습니다.
In [16]: df.groupby(["state", "gender"], observed=False).count().fillna(0)["name"].astype(int)
Out[16]:
state gender
AK F 0
M 2
AL F 1
M 1
Name: name, dtype: int64
In [17]: df.groupby(["state", "gender"], observed=True).count()["name"]
Out[17]:
state gender
AK M 2
AL M 1
F 1
Name: name, dtype: int64
위 예시는 아래 stackoverflow에서 가져온 것이니 링크를 참고해 보시면 좋을 것 같습니다 ^^
미래에 버전 업데이트 시 오류가 생긴다는 뜻은 아니고, observed인자의 기본 값이 False에서 True 로 변경될 예정이니 주의하라는 뜻입니다. 필요에 따라 아래처럼 대처하시면 될 것 같습니다.
코드의 결과에서 관측되지 않은 값들을 꼭 표시해야 할 경우에는 False 로 설정하시기 바랍니다.
(위 예시 코드처럼 관측되지 않은 값의 groupby count 결과도 0으로 표시되어야 하는 경우)
이외의 경우에는 기본값으로 사용하시기 바랍니다 (observed 인자를 따로 False나 True로 전달하지 않고). observed 인자를 매 번 전달하면 번거로움과 코드의 복잡성 증가 문제가 있기 때문입니다.
이렇게 하면 버전 업데이트가 되기 전까지 지금처럼 계속해서 경고 메시지가 뜰텐데, 이 때는 아래처럼 경고 메시지를 뜨지 않게 하는 코드를 맨 앞에 추가하는 방법도 있습니다.
import warnings
warnings.filterwarnings(action='ignore')
그래서 그게 무슨 뜻인거에요?
observed 를 false로 설정하는 게 더 좋다는 건가요?