본문 바로가기

데이터분석/pandas

pandas series dataframe

이번 시간에는 pandas 데이터의 시리즈와 데이터프레임에 대해 알아보겠습니다. 

 

pandas가 NumPy의 스타일을 많이 차용했지만 가장 큰 차이점은 pandas표 형식의 데이터나 다양한 형태의 데이터를 다루는 데 초점을 맞춰 설계했다는 것입니다. NumPy는 단일 산술배열 데이터를 다루는 데 특화되어 있습니다. 

 

1)  Series 

- 일련의 객체를 담을 수 있는 1차원 배열 같은 자료구조입니다. 

- 색인(index)라고 하는 배열의 데이터와 연관된 이름을 가지고 있습니다. 

 

Series 객체의 문자열 표현은 왼쪽에 색인을 보여주고 오른쪽에 해당 색인의 값을 보여줍니다. 위 샘플에서는 데이터의 색인을 지정하지 않았기에 기본 색인인 정수 0에서 N - 1 (N은 데이터의 길이)까지 숫자가 표시됩니다. Series의 배열과 색인 객체는 각각 values 와 index 속성을 통해 얻을 수 있습니다. 

 

각각의 데이터를 지칭하는 색인(index)를 지정할 때는 위와 같이 하면 됩니다. 위 예를 보면 색인을 통해서 필요한 데이터에 접근이 가능합니다. 위에서 ['a','b','c' 는 색인의 배열로 해석됩니다. 

 

불리언 배열 사용을 통한 값 필터링, 산술 곱셈 수행, 수학 함수 적용 등 색인-값 연결이 유지됨을 확인할 수 있습니다. 

 

Series를 이해하는 다른 방법 중 하나는 고정 길이의 정렬된 사전형으로 series를 생각하는 것입니다. 보다보면 색인값에 데이터값을 매핑하는 것이 파이썬의 사전형과 비슷합니다. 그래서 Series 객체는 파이썬의 사전형을 인자로 받아야 하는 많은 함수에서 사전형을 대체하여 사용할 수 있습니다. 

 

위 예제에서는 키 값을 기준으로 값이 들어있는지 논리값을 판단할 수 있습니다. value에 대해서 in 을 적용할 때는 모두 false 로 나옵니다. series 타입 데이터에서 논술 연산자 in은 series의 value는 판단이 되지 않는 것으로 보입니다. 대신, 시리즈의 값 속성을 기준으로 논리 연산을 적용하면 예상대로 논리 연산이 잘 작동합니다. 

 

즉, 위 예제를 통해 알 수 있는 것은 시리즈 객체에서 in 연산을 적용할 때는 색인(index)를 기준으로만 적용되며 value 기준으로 보고 싶을때는 시리즈 객체에서 value속성에 접근한 상태에서 판단하도록 해야된다는 것입니다. 

 

파이썬 사전 객체로 Series 객체를 생성할 수 있습니다. 색인을 직접 지정하면 원하는 순서대로 색인을 넘겨줄 수 있습니다. 위 예제에서는 'California'에 대한 값은 찾을 수 없습니다. sdata에 해당 색인으로 매핑된 값이 없기 때문이며 이 때는 NaN으로 표기됩니다. 

 

isnull 과 notnull 함수는 누락된 데이터를 찾을 때 사용됩니다. 특히, 나중에 불린 인덱싱을 할 때는 자주 이용합니다. 

 

isnull 과 notnull은 series의 인스턴스 메서드로도 존재하기에 위에처럼 쓸 수도 있습니다. 

 

시리즈끼리 산술 연산을 할 때는 색인과 라벨로 자동 정렬이 됩니다. 

 

Series의 색인은 모두 name속성이 있습니다. 색인은 대입하여 변경할 수 있음을 위 예제를 통해 확인할 수 있습니다. 

 

2)  DataFrame 

 

DataFrame은 표 같은 스프레드시트 형식의 자료구조이고 여러 개의 컬럼이 있는데 각 컬럼은 서로 다른 종류의 값을 담을 수 있습니다. DataFrame은 로우와 컬럼에 대한 색인을 가지고 있습니다. 내부적으로 데이터는 하나 이상의 2차원 배열에 저장됩니다. 

 

 

dataframe 객체는 보통 같은 길이의 리스트에 담긴 사전을 이용하거나 numpy 배열을 이용해서 생성합니다.

원하는 순서대로 컬럼을 지정하면 원하는 순서를 가진 DataFrame 객체가 생성됩니다. 

 

사전에 없는 값을 넘기면 결측치로 저장됩니다. 

 

DataFrame 컬럼은 2가지 방법으로 접근할  수 있습니다. 

 

위 예제처럼 사전 형식의 ㅍ기법으로 접근하거나 속성 형식으로 접근하는 방법 2가지 입니다. 

 

로우에 접근할 때는 위치나 loc 속성을 이용해서 이름을 통해 접근할 수 있습니다. 

컬럼은 대입이 가능한데 스칼라 값이나 배열 값으로 대입이 됩니다. (위 예제 참고)

 

리스트나 배열을 컬럼에 대입할 때는 대입하려는 값의 길이가 DataFrame 의 크기와 동일해야 합니다. Series를 대입하면 DataFrame 의 색인에 따라 값이 대입되며 존재하지 않는 색인에는 결측치가 대입됩니다. 

존재하지 않는 컬럼을 대입하면 새로운 컬럼을 생성합니다. 

 

컬럼의 삭제는 del 예약어를 통해 할 수 있습니다. 

 

중첩된 사전을 이용해서 DataFrame 를 생성할 수 있습니다. 여기서 중첩됐다는 것은 키-값 에서 값이 딕셔너리로 이루어진 사전을 말합니다. 위 예제를 통해서 이해하시면 될 것 같습니다. 데이터를 전치시키거나 직접 색인을 지정해서 DataFrame를 생성할 수 있습니다. 이때, 지정된 색인에 값이 없으면 nan으로 처리됩니다.

 

Series 데이터처럼 인덱스와 컬럼에 이름을 줄 수 있습니다. 또한 values 속성은 DataFrame 에 저장된 데이터를 2차원 배열로 반환합니다. 만약, DataFrame의컬럼이 서로 다른 dtype 을 가지고 있다면 모든 컬럼을 수용하기 위해 그 컬럼의 배열의 dtype이 선택됩니다. frame2.values를 보면 모두 object 타입으로 반환된 것을 보시면 무슨 말인지 감이 올 거라고 생각합니다. 

 

3) 색인 객체 

pandas 의 색인 객체는 표 형식의 데이터에서 각 로우와 컬럼에 대한 이름과 다른 메타데이터(축 이름)를 저장하는 객체입니다. 

 

색인 객체는 슬라이싱이 됩니다. 그러나, 색인 객체는 변경이 불가능합니다. 

 

자꾸 색인 객체라고 해서 아리송하는 분이 있을까봐 타입으로 보여드리겠습니다. index 라는 객체를 보시면 판다스 인덱스 객체라고 위 코드에 나옵니다. 이러한 타입을 가진 객체를 색인 객체라고 하는데, 판다스 데이터프레임에서는 인덱스와 컬럼이 이러한 색인 객체입니다. 

 

index 객체도 고정 크기로 동작합니다.

 

보통 파이썬을 이용할 때 배우는 여러 타입의 객체들 딕셔너리, 튜플 등등 이외의 또 다른 타입의 객체를 보면 당황할 수 있습니다. pandas 이외의 라이브러리들을 이용하다보면 가끔 처음 보는 이름의 객체들이 나옵니다. 저도 처음에는 별 생각없이 봤지만 이러한 객체들이 있구나 하는 정도로 정리를 하고 있습니다. 억지로 외울려고 하지는 마시고 하다보면 친숙하게 느껴질 거라고 생각합니다. 이런 게 있구나 하고 봐주는 정도면 될 것 같습니다. 

 

마지막으로 pandas의 인덱스는 중복값을 허용하는데 중복값을 선택하면 해당 값을 가진 모든 항목이 선택됩니다. 

 

 pandas 의 굉장히 기초적인 부분들을 살펴보았습니다. 

정리하는 차원에서 모든 거긴 하지만, 판다스를 쓰는데 이번 포스팅에서 다룬 내용들이 크게 중요한지는 아직 잘 모르겠습니다. 하지만 언어란게 그렇듯이 많이 알수록 나중에 도움이 될 때가 꼭 있을 거라고 생각합니다. 오늘 다룬 내용은 판다스 라이브러리를 만든 '웨스 매키니' 님의 '파이썬 라이브러리를 활용한 데이터분석 (2판)'의 내용을 참고하였습니다. 

 

데분을 좋아하거나 판다스를 잘하고싶은 분들이라면 이 책을 꼭 두고 틈날때마다 필요한 부분을 훏어보시고 사전처럼 쓰면 좋을 것 같다고 생각합니다. 

 

그럼, 오늘 포스팅은 마치겠습니다 :)