Yours Ever, Data Chronicles

[pandas] Series & DataFrame에서 자주 사용하는 유용한 메서드 (1) 본문

Skillset/Python

[pandas] Series & DataFrame에서 자주 사용하는 유용한 메서드 (1)

Everly. 2022. 6. 27. 08:04

이번 포스팅과 다음 포스팅은 파이썬 판다스의 Series(시리즈)와 DataFrame(데이터프레임)을 사용할 때, 자주 사용하는 유용한 메서드들을 정리해보려고 한다. 먼저 시리즈와 데이터프레임이 무엇인지, 어떻게 만드는지를 알아보고 이 두가지를 다룰 때 어떤 메서드를 자주 사용하는지 알아보자!

이번 편은 시리즈와 데이터프레임이 무엇인지를 알아보자.

포스팅에서 사용한 코드는 이 깃허브에서 다운로드하시면 됩니다 :)

 

✔Table of Contents

     

    1. 시리즈 & 데이터프레임 만들기 

    시리즈(series)와 데이터프레임(dataframe)은 데이터를 다루는 데 특화된 형태라고 할 수 있다.

    먼저, 우리가 자주 보게 되는 데이터프레임(df)은 행과 열의 2차원 형태로 구성되어 있다. df에서는 열을 컬럼(column)이라고 하고, 행은 인덱스(index) 라고 부른다.

    데이터프레임 예시(형광펜 = 행, 열)

    그리고 시리즈(series)는 df에서 하나의 열만 똑 떼어낸 것이라고 보면 된다. 즉, 1차원이다.

    이제 시리즈와 데이터프레임을 직접 하나씩 만들어 보자.

     

    1-1. 시리즈

    pd.Series([리스트], index)

     

    시리즈는 인덱스를 가지는데, 지정하지 않으면 디폴트로 0부터 차례대로 숫자 인덱스가 부여된다.

    예를 들어 1반의 수학 성적 데이터로 시리즈를 만들어보면 다음과 같다.

     

    import pandas as pd
    
    # 예시) 1반의 수학 성적 데이터
    pd.Series([89, 72, 54, 100, 92, 37, 49])

     

    오른쪽과 같이 index를 지정하지 않았더니 자동으로 0~6의 숫자 인덱스가 부여되었다. 만일 인덱스를 부여한다면?

     

    # 인덱스 지정: 학생 이름 
    pd.Series([89, 72, 54, 100, 92, 37, 49], 
    	index = ['anna', 'albert', 'dino', 'florence', 'harry', 'justin', 'james'])

     

    오른쪽처럼 왼쪽에 학생 이름 인덱스가 부여되었다. 

     

    lucy라는 학생의 성적이 누락되었다고 하자. 이 경우 간단하게 append를 활용해 추가해줄 수 있다.

     

    # lucy의 성적이 빠졌다. 간단하게 추가를 해보자.
    
    math_s = pd.Series([89, 72, 54, 100, 92, 37, 49], index = ['anna', 'albert', 'dino', 'florence', 'harry', 'justin', 'james'])
    lucy = pd.Series([50], index = ['lucy'])
    
    math_s.append(lucy)

     

    그런데 위의 경우에는 인덱스가 학생 이름이라서 상관없지만, 따로 인덱스가 지정되어 있지 않은 경우엔 그냥 숫자 인덱스가 부여된다고 했었다.

    그렇다면 위처럼 append를 해도 자동으로 숫자 순서대로 부여될까?

     

    # 인덱스 지정을 안 한다면? -> 인덱스 번호까지 디폴트 값으로 변화되진 않는다.
    math_s = pd.Series([89, 72, 54, 100, 92, 37, 49])
    lucy = pd.Series([50])
    
    math_s.append(lucy)

     

    아쉽게도 인덱스 번호까지 숫자 순서대로 변화하진 않는다. 맨 마지막 값은 '0' 으로 붙여졌다.

    이게 싫다면 ignore_index = True 옵션을 사용해주면 된다! 

     

    # 이런 경우엔 ignore_index를 사용해주자! (c.f.뒤에 나오겠지만 df의 경우는 reset_index도 사용가능)
    math_s.append(lucy, ignore_index = True)

     

     

    1-2. 데이터프레임

    pd.DataFrame({딕셔너리}, index, columns)

     

    • 데이터프레임은 시리즈와는 다르게 2차원이므로, 인덱스(행 이름)뿐만 아니라 컬럼(열 이름)값도 가진다. 그래서 넣어주는 옵션이 index, columns로 2개이다.
    • 처음 만들 때 index, columns를 지정하지 않아도 다른 명령어로 지정할 수 있다!
      • df.index = [ ] / df.columns = [ ] 를 사용하자.
      • 인덱스 초기화를 하려면 df.reset_index()를, 새로운 컬럼을 인덱스로 지정하려면 df.set_index() 

     

    앞서 만들었던 1반의 수학 성적 데이터에 정보를 추가해보자. 성적뿐만 아니라, 나이 정보도 추가하였다.

     

    # 앞에서 만들었던 1반의 수학성적 데이터 
    ## 인덱스: 학생 이름, 열: 성적, 나이
    
    math_df = pd.DataFrame({'score': [89, 72, 54, 100, 92, 37, 49], 
                                 'age': [12, 15, 10, 9, 8, 11, 12]},
                                index =['anna', 'albert', 'dino', 'florence', 'harry', 'justin', 'james'],
                                columns = ['score', 'age'])
    math_df

     

    위와 같이 인덱스로는 학생의 이름, 두 개의 열은 성적(score), 나이(age) 이다. 

    여기서 인덱스를 리셋시켜보자.

     

    1) 인덱스 리셋: reset_index()

    # 인덱스 리셋 
    math_df2 = math_df.reset_index()
    math_df2

     

    인덱스를 리셋시키면 위 이미지처럼 원래 지정되어 있던 학생 이름이 'index' 라는 새로운 열로 만들어진다. 

    reset_index()에는 drop 이라는 옵션이 있는데, 이를 사용하게 되면 기존의 인덱스가 아예 사라진다.

     

    math_df2 = math_df.reset_index(drop = True)
    math_df2 #drop = True 지정 시 인덱스가 사라짐.

     

    2) 기존 컬럼을 인덱스로 지정: set_index()

    반대로, 기존의 특정 컬럼을 새로운 인덱스로 지정할 수도 있다.

    위의 케이스에서 'score' 열을 인덱스로 지정해보자.

     

    # 다시 인덱스 지정
    ## 다만 set_index는 기존의 컬럼만 인덱스로 설정 가능
    math_df3 = math_df2.set_index('score')
    math_df3

    3) 인덱스 지정: df.index = [리스트]

    하지만 위의 경우에는 기존에 존재하고 있는 컬럼만 인덱스로 지정할 수 있다는 단점이 있다.

    아예 새로운 값을 인덱스로 지정하기 위해선 아예 데이터프레임의 index 메서드로 지정하자.

     

    # 완전히 새로운 인덱스로 지정하고 싶은 경우: df.index 사용 
    math_df2

    math_df2.index = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    math_df2

     

    4) 컬럼 지정: df.columns = [리스트]

    마찬가지로 컬럼값도 바꿔줄 수 있다! 위와 비슷한 방법을 사용한다.

     

    # df.columns로 컬럼명도 변경 가능
    math_df2.columns = ['s', 'a']
    math_df2

     

    이번 포스팅이 시리즈와 데이터프레임의 기본적인 기능을 알아봤다면,

    다음 포스팅에서는 시리즈와 데이터프레임에서 자주 사용하는 중요 메서드를 알아보자 :)

    반응형