ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] pandas 데이터프레임 속성값 세는 두 가지 방법
    파이썬 배우기 2023. 11. 22. 14:47

    하나의 열에서 고윳값에 대해 속성의 갯수를 파악하는 것은 데이터 분석에서 가장 기초가 되는 작업입니다.

    어떤 값들을 가지고 있는지와, 몇 개씩 존재하는지 파악함으로써 데이터의 속성과 분포를 살펴볼 수 있기 때문입니다.

    pandas 에서 어떻게 속성값을 세는지 두 가지 방법을 알려드리려합니다.

     

    1. 데이터프레임의 내장함수인 value_counts()

    2. collections 모듈의 Counter 클래스

     

    우선 grade가 A, B, C, null 로 이루어진 16개의 길이의 데이터프레임을 만들겠습니다.

    grade = list('ABCAABCBABCABBC ')
    df_score = pd.DataFrame({'grade':grade})
    # value_counts()의 dropna 파라미터를 설명드리기 위해 널값을 일부로 추가하겠습니다!
    df_score = df_score.replace(' ', np.NaN) 
    df_score
    len(df_score)

     

    1. value_counts() 

    데이터프레임 자체 내장된 함수라 라이브러리를 불러오지 않아도 되지만, dropna =True 가 기본으로 설정되어 있어서 결측값이 있다면 이것을 제외하게 됩니다. 그래서 결측값의 갯수도 출력하고 싶으면, dropna =False 로 고치구, 카운트 값이 내림차순이 디폴트이지만, ascending = True 로 오름차순 정렬도 할 수 있습니다. 그리고 이 결과값이 타입은 Series 입니다.

    df_score.value_counts()
    
    # Result
    grade
    B        6
    A        5
    C        4

     

    결측값도 포함하고, 값을 오름차순 하고 싶을 때!

    df_score.value_counts(dropna=False, ascending=True)
    
    # 결측값도 속성값에 포함하고, 카운트한 것을 오름차순 정렬 
    grade
    NaN      1
    C        4
    A        5
    B        6

     

    인덱스를 기준으로 정렬하고 싶을 때!

    df_score.value_counts(dropna=False).sort_index()
    
    # 인덱스를 기준으로 정렬하고 싶을 때
    grade
    A        5
    B        6
    C        4
    NaN      1

     

    2. Counter 

    Counter 한 번이면 속성값별로 손쉽게 갯수를 카운트할 수 있습니다. 카운트 값에 따라 내림차순 정렬되며, 결과값은 dict 으로 리턴이 되어서 필요시 타입을 바꿔야합니다.

    from collections import Counter
    counted = Counter(df_score['grade']) 
    
    print(counted)
    print(counted.keys())
    print(counted.values())
    
    # Result
    Counter({'B': 6, 'A': 5, 'C': 4, nan: 1})
    dict_keys(['A', 'B', 'C', nan])
    dict_values([5, 6, 4, 1])

     

    dict으로 나온 값을 value_counts() 와 같은 Series 로 바꾸고 싶으면

    pd.Series(data=counted.values(), index=counted.keys())
    
    # Result
    A      5
    B      6
    C      4
    NaN    1

     

    카운트 값에 따라 Series를 정렬하고 싶으면,

    pd.Series(data=counted.values(), index=counted.keys()).sort_values(ascending = False)
    
    # Result
    B      6
    A      5
    C      4
    NaN    1
Designed by Tistory.