인프런 커뮤니티 질문&답변

exwhite님의 프로필 이미지
exwhite

작성한 질문수

캐글 설문조사로 데이터 분석 입문하기

[4/13] 🌏 캐글러는 어디에 살고, 어떤 직업일까?! - 함수로 반복작업 줄이기(1)

q1_cols를 작성하는 부분에서 궁금한 점이 있습니다.

작성

·

114

0

q1_cols = answer["Q1"].value_counts().sort_index().index.tolist()
def show_countplot_by_qno(qno, fsize=(10, 6), order=None):
    if not order:
        order = answer[qno].value_counts().index.tolist()
    plt.figure(figsize=fsize)
    sns.countplot(data=answer, y=qno,
                  order=order,palette="Blues_r"
                 ).set_title(question[qno])

show_countplot_by_qno("Q1", order=q1_cols)

not order 일 때는 tolist() 안해도 출력이 되는데

왜 order를 변수로 넣을 때는 tolist() 안하면 에러가 발생하는지 궁금합니다.

tolist() 붙여봐도 달라진게 없는것 같은데 어떤 방식인지 모르겠습니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

tolist()를 사용하는 이유는 pandasvalue_counts()sort_index() 메서드로부터 반환받은 객체의 형태 때문입니다. value_counts() 메서드는 각 값의 개수를 세어 Series 객체로 반환하며, sort_index() 메서드는 Series 객체의 인덱스를 기준으로 정렬합니다. 이 때, .index 속성을 사용하면 인덱스를 가져올 수 있지만, 이는 pandas의 Index 객체 형태로 반환됩니다.

countplot 함수의 order 매개변수는 특정 순서를 지정하기 위해 리스트 형태를 요구합니다. 그래서 tolist()를 사용하여 pandas의 Index 객체를 파이썬의 기본 리스트 형태로 변환하는 것입니다. 이는 order 매개변수에 기대하는 데이터 타입과 일치시키기 위해 필요한 과정입니다.

not order 조건부에서는 value_counts().index.tolist() 부분이 특정 변수에 할당되지 않고 바로 사용되는 경우가 보통입니다. 이 경우 tolist()를 호출하지 않더라도 내부적으로 order 매개변수를 해석할 때 필요에 따라 적절한 형태로 변환될 수 있습니다. 하지만 명시적으로 리스트 형태로 전달하려면 tolist()를 사용하는 것이 좋습니다.

따라서, order 매개변수에 직접 인덱스 리스트를 전달하기 위해 tolist()를 사용하는 것은 필수적인 작업으로, 이를 통해 에러 없이 올바른 순서로 데이터를 시각화할 수 있습니다.

exwhite님의 프로필 이미지
exwhite

작성한 질문수

질문하기