판다스의 자료 구조(2) - 시리즈(Series)

업데이트:

이전글 : 판다스의 자료 구조(1) - 데이터의 유형

시리즈(Series)의 구조를 살펴보자

딕셔너리에서 시리즈로

시리즈는 판다스에서 1차원 데이터를 다루기 위한 기본 자료형이다. 물론 파이썬에는 리스트라는 1차원 배열 형태의 자료형이 이미 기본적으로 제공되고 있긴 하다. 시리즈가 리스트와 다른 점은 인덱스(index), 즉 자료값에 대한 명칭 붙어 있다는 것이다. 이러한 구조는 파이썬 기본 자료형 중에서 ‘키(key) : 값(value)’으로 된 여러 쌍들의 묶음인 딕셔너리(dictionary)와 매우 유사하다. 실제로 판다스의 시리즈는 딕셔너리를 기초로 다양한 속성과 기능을 추가해 만들어진 것이기도 하다.

지난 포스팅에서 예시로 들었던 ‘주식 종목 리스트’에서 종목코드를 키, 종목명을 값으로 하는 딕셔너리를 아래와 같이 생성해보자.

In [1]:
stock = {'A005930': '삼성전자', 'A051910': 'LG화학', 'A035420': 'NAVER',
         'A005380': '현대차', 'A035720': '카카오', 'A068270': '셀트리온'}

print(stock.keys())
print(stock.values())

[코드설명]
line 1 : 딕셔너리 생성
line 3 : 딕셔너리 객체의 키 들을 모아서 반환하는 .keys 메서드를 호출한 뒤 출력
line 4 : 딕셔너리 객체의 값 들을 모아서 반환하는 .values 메서드를 호출한 뒤 출력

Out [1]:
dict_keys(['A005930', 'A051910', 'A035420', 'A005380', 'A035720', 'A068270'])
dict_values(['삼성전자', 'LG화학', 'NAVER', '현대차', '카카오', '셀트리온'])

위의 출력 결과를 보면 dict_keys는 시리즈의 인덱스, dict_values는 시리즈의 자료값에 대응한다. 다음과 같이 딕셔너리를 pd.Series 명령어의 인수로 넣으면 시리즈로 변환된다.

In [2]:
sr1 = pd.Series(stock)
sr1
Out [2]:
A005930     삼성전자
A051910     LG화학
A035420    NAVER
A005380      현대차
A035720      카카오
A068270     셀트리온
dtype: object

딕셔너리와 달리 시리즈는 매우 정돈된 형태로 출력이 되며, 생성된 객체를 통해 접근/수행할 수 있는 속성과 기능이 훨씬 다양하다.

인덱스(index) - 개별 데이터의 명칭

인덱스는 시리즈의 개별 자료값(value)에 붙은 고유한 명칭들을 모아놓은 것이다. 위에 출력된 표에서 좌측 굵은 글씨의 열이 바로 인덱스다. 인덱스는 시리즈 객체의 속성으로서 .index 로 접근할 수 있다.

In [3]:
sr1.index
Out [3]:
Index(['A005930', 'A051910', 'A035420', 'A005380', 'A035720', 'A068270'], dtype='object')

인덱스를 별도로 지정하지 않고 시리즈 객체를 생성하게 되면, 0부터 순번을 매기는 정수 인덱스 형태가 자동으로 설정된다. stock 딕셔너리에서 키를 제외하고 값으로만 시리즈를 생성해보자

In [4]:
sr2 = pd.Series(stock.values())
sr2
Out [4]:
0     삼성전자
1     LG화학
2    NAVER
3      현대차
4      카카오
5     셀트리온
dtype: object

시리즈의 인덱스 속성에 새로운 값을 할당하여 수정할 수도 있다. sr2 시리즈의 인덱스에 stock 딕셔너리의 키를 다시 집어넣어주면, sr1 시리즈와 동일한 형태가 된다.

In [5]:
sr2.index = stock.keys()
sr2
Out [5]:
A005930     삼성전자
A051910     LG화학
A035420    NAVER
A005380      현대차
A035720      카카오
A068270     셀트리온
dtype: object

네임(Name) - 시리즈의 명칭

시리즈는 자료값 각각에 대한 명칭(=인덱스) 외에도 시리즈 자체의 명칭을 가질 수 있다. 이러한 속성을 네임(Name)이라고 한다.

지난 포스팅(바로가기)에서는 아래와 같이 주식 종목 관련 데이터프레임으로부터 ‘종목명’ 열을 추출해 시리즈를 만들어냈다.

In [6]:
#### 이전 코드 생략 ###
sr = df['종목명']
sr
Out [6]:
종목코드
A005930     삼성전자
A051910     LG화학
A035420    NAVER
A005380      현대차
A035720      카카오
A068270     셀트리온
Name: 종목명, dtype: object

출력된 내용을 보면 Name: 종목명 이라고 되어 있다. 시리즈 객체로부터 네임 속성에 접근하려면 .name을 사용한다(소문자임에 주의!).

In [7]:
sr.name
Out [7]:
'종목명'

그런데 앞서 딕셔너리를 통해 시리즈를 직접 생성했을 때에는 네임 속성이 출력되지 않았다. 딕셔너리에는 네임에 해당하는 정보가 따로 없기 때문이다. 다음과 같이 sr1 시리즈의 네임 속성을 할당할 수 있다.

In [8]:
sr1.name = '종목명'
sr1
Out [8]:
A005930     삼성전자
A051910     LG화학
A035420    NAVER
A005380      현대차
A035720      카카오
A068270     셀트리온
Name: 종목명, dtype: object

시리즈의 네임 속성의 기능은 무엇일가? 이는 다음 포스팅에서 설명할 데이터프레임의 컬럼명(columns) 속성과 직결되므로 그때 살펴보도록 하자.

데이터타입(dtype)

시리즈를 구성하는 개별 값들은 문자열(str), 정수(int), 실수(float), 날짜/시간(datetime) 등과 같은 자료형(data type)을 갖는다. 그리고 하나의 시리즈에는 모든 값들이 동일한 자료형을 취하는 경우가 많다.

시리즈의 dtype 속성은 시리즈 구성 원소들이 취하고 있는 대표적인 자료형을 나타낸다. 위에서 생성한 sr2 시리즈의 데이터타입을 다음과 같이 확인할 수 있다.

In [9]:
sr2.dtype
Out [9]:
dtype('O')

위에서 ‘O’는 object 자료형의 약자이다. 판다스에서 object 자료형이란 문자열이거나 또는 한 시리즈 내에 여러 종류의 자료형이 원소로 포함돼있다는 의미다.

이처럼 판다스에서 정의하는 dtype과 파이썬의 기본 자료형은 명칭이 조금 다르다. 앞으로 판다스의 다양한 객체들을 다룰 때 dtype은 필수적인 고려사항이므로, 다음의 표 내용은 꼭 기억해두자.

판다스 dtype 설명 파이썬 자료형
object 문자열 또는 복합형 str
int64 정수 int
float64 실수 float
bool 불리언(참/거짓) bool
datetime64 날짜/시간 datetime
  • 주 : 복합형(mixed type)은 하나의 시리즈 안에 서로 다른 자료형의 값들이 섞여 있는 경우를 말함

다음글 : 판다스의 자료 구조(3) - 데이터프레임(DataFrame)

판다스 카테고리 목록 바로가기

댓글남기기