본문 바로가기

파이썬 기초

파이썬 Pandas 오늘은 DataFrame 제대로 이해하기

파이썬 데이터프레임



데이터 프레임(DataFrame) 객체는 Pandas의 기본 구조체로 행과 열을 가지는 2차원 데이터 구조입니다.

데이터 프레임은 열마다 다른 형태의 데이터를 가질 수 있으며 이전 포스팅에서 다루었던 1차원 데이터인 Series 객체의 집합체 또는 딕션너리(Dictionary)의 특수한 버전으로 이해하면 됩니다.


DataFrame의 이해를 위해서 먼저 1 차원 데이터인 Series 2개를 생성하고 생성한 2개의 Series를 이용하여 DataFrame를 만들어 보겠습니다. 


첫 번째 Series(share_price)는 현재의 주가를, 두 번째 Series(outstanding_shares)는 주식 발행 수를 나타냅니다. 

dataframe 생성 1


위에서 생성한 Series 2개를 가지고 DataFrame 객체를 만들기 위해서 pandas.DaraFrame() 이라는 클래스(Class)를 이용합니다. 클래스의 인자로 딕션너리를 사용하였는데, 딕션너리의 키(Key)에  '주가'를 입력하고 share_price(Series)를 할당하였고 '발행수'에는 outstanding_shares(Series)를 할당하였습니다. 


그러면 키 값은 열 이름이 되고 할당한 Series는 열 데이터가 됩니다.

dataframe 생성 2


DataFrame의 사용에 있어 딕션너리와 유사하게 키를 매핑하면 DataFrame은 열 이름을 열 데이터로 이루어진 Series에 매핑을 합니다. 예를 들면 '주가' 라는 키를 입력하면 share_price 라는 Series 객체를 반환하게 됩니다.


Pandas의 DataFrame를 정복하기 위해서는 이 부분을 잘 이해하고 넘어가야 합니다. 

일반적인 2차원 배열에서 행을 반환하지만 DataFrame에서는 열을 반환합니다. 


이러한 이해를 돕고자 DataFrame 생성 시 1차원 열 데이터인 Series 객체 2개를 딕션너리를 이용하여 만들었습니다. 딕션너리의 생성 및 사용법과 연계하여 생각해보면 이해가 쉬울 수 있습니다.  


예제로 share_df['주가]를 실행시켜보면 share_price 라는 Series가 반환되는 것을 확인 할 수 있습니다.

dataframe 예제 1



정리해 보면 DataFrame은 1차원의  열의 형태를 가지고 있는 Series 객체들을 가지고 있는 딕션너리의 특수한 형태입니다.



정리가 되었으면 DataFrame의 데이터를 선택하는 방법에 대해서 알아봅시다.


DataFrame의 열의 이름은 각 열을 이루고 있는 Series 객체의 키 값들로 구성되어 있기 때문에 딕션너리와 동일한 방법으로 DataFrame의 각 열에 접근이 가능합니다.

dataframe 데이터 선택 1


참고로 대괄호 대신 속성 스타일('.')을 사용하여도 동일한 결과가 출력되는 것을 볼 수 있습니다.

dataframe 데이터 선택 2


DataFrame에서 하나의 열을 선택할 수 있다면 다음은 선택한 열에서 하나의 데이터를 선택해 보겠습니다.


아래와 같이 두 번째 대괄호 안에 행의 명시적 인덱스를 추가하면 접근할 수 있습니다.dataframe 데이터 선택 3


추가로 shares['주가']['NAVER'] 대신  shares_df.주가.NAVERshares_df['주가'].NAVER의 형태로 접근도 가능합니다.


Series 객체에서 다루었던 loc(명시적 인덱스)와 iloc(정수형의 묵시적 인덱스)을 사용하여도 데이터 선택이 가능합니다.


단지 주의해야 할 부분은 loc와 iloc를 사용할 경우에는 행의 인덱스부터 선택하고 열 인덱스를 선택해야 됩니다.

셀트리온의 주가를 가져오기 위해서는 다음과 같이 .loc['셀트리온']['주가']을 사용하면 합니다.

dataframe 데이터 선택 4


다음과 같이 대괄호 2개 대신에 하나의 대괄호를 사용해서 행과 열을 콤마(,)로 구분하여 표현하는 것도 가능합니다.

dataframe 데이터 선택 5


실제 소스 코드를 구현하다 보면 하나의 값을 찾을 경우도 많지만 전체 DataFrame 중 특정 조건을 행만 선택하고 싶은 경우가 자주 발생하는데 이럴 경우 대괄호 안에 해당 조건을 추가하면 됩니다.

엑셀(Excel)의 필터 기능과 동일하다고 생각하면 됩니다.


만약 주가가 100,000원보다 큰 항목만 선택하고 싶다면 조건으로 shares_df['주가'] > 100000 를 사용하면 총 5개의 항목 중에 주가가 100,000원 이상인 항목 3개만 선택됩니다.

dataframe condition


위의 예제는 한 가지 조건일 경우이지만 두 가지 이상의 조건이 필요하다면 각각의 조건을 괄호로 묶어서 and 또는 or 조건을 추가하면 됩니다.


※ 주의 : DataFrame에서는 파이썬에서 논리 연산자로 사용하는 and 대신에 '&'를 or 대신에는 '|'를 사용해야 합니다.


그러면 주가가 100,000원 보다 크고 발행 수가 100,000개 보다 큰 항목만 선택하고 싶다면 다음과 같이 입력하면 됩니다.

dataframe multi condition


지금까지 DataFrame 객체의 기본적인 이해를 위해 정리해보았습니다. 

어려움이 있거나 질문 있으면 댓글 주세요~