작성
·
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()
를 사용하는 이유는 pandas
의 value_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()
를 사용하는 것은 필수적인 작업으로, 이를 통해 에러 없이 올바른 순서로 데이터를 시각화할 수 있습니다.