2.2 Time Series 머신러닝을 위한 Python 필수 라이브러리, Pandas 1편
Pandas란?
Python Data Analysis Library의 약어이며, R을 모티브로 하여 만들어진 파이썬 라이브러리이다. 쉽고 직관적인 관계형 또는 분류된 데이터로 작업할 수 있도록 설계된 빠르고 유연하며 표현이 풍부한 데이터 구조를 제공하고 있다. Pandas가 필요한 이유는 Numpy의 ndarray 데이터 구조는 산술 연산 작업에서 포맷이 잘 정리된 데이터 타입을 위한 기능들을 제공하고 있지만, 현실 데이터는 생각보다 정돈이 잘 되어있지 않기 때문이다. Pandas는 데이터를 표(table) 형태로 처리할 수 있어서 수집된 데이터의 전처리 등 각종 데이터 핸들링을 쉽고 편하게 할 수 있다. 그렇기 때문에 데이터 분석을 하려면 Pandas또한 필수로 사용해야 한다.
2.2 Series
리스트, 튜플, 딕셔너리등 여러 객체를 담을 수 있는 1차원 배열 같은 자료구조이다.
2.2.1.1 series 데이터 생성
series의 경우 여러 데이터 타입으로 만들 수가 있는데, 실습을 통해 알아보도록 하자.
1. 딕셔너리로 series 만들기
딕셔너리의 key 값이 index로, value값이 cell 값으로 들어간 것을 알 수 있고, series는 딕셔너리와 구조가 비슷하다고 볼 수 있다.
in [2]:
import pandas as pd
dict_data = {'a':1, 'b':2, 'c':3}
series_data = pd.Series(dict_data)
print(series_data)
print(type(series_data))
Out [7]:
print(series_data.index)
Out [9]:
print(series_data.values)
Out [11]:
2. 리스트로 만들기
리스트로 만들 경우 딕셔너리와 달리 key 값이 없는 순서형 자료형이기 때문에, 인덱스는 자동으로 0부터 부여된다.
list_data = [2,4,6,8]
series_data = pd.Series(list_data)
print(series_data)
Out [15]:
print(series_data.index)
Out [17]:
print(series_data.values)
Out [19]:
튜플의 경우에도 series로 만들 때 리스트와 결과 차이는 없다.
tuple_data = (2,4,6,8)
series_data = pd.Series(tuple_data)
Series 데이터에서 dict 타입으로도 변경이 가능하다.
print(series_data.to_dict())
Out [23]:
2.2.1.2 딕셔너라와 같이 index를 지정해서 series 객체 생성하는 방법
Pandas의 경우 index의 값을 직접 변경해줄 수 있다.
In [24]:
series_data = pd.Series(list_data, index = ['a','b','c','d'])
print(series_data)
Out [26]:
2.2.2 Dataframe
Dataframe은 한 개의 열이 series이고 다수가 모여 dataframe(2차원)을 된다. 데이터프레임에서 하나의 열만 가져오게 된다면, 그건 series(1차원)이다. 그리고 dataframe은 표 같은 스프레드시트 형식의 자료 구조이다.
2.2.2.1 dataframe 생성
Dataframe 또한 여러 방법으로 만들 수 있다.
1. 딕셔너리로 만들기
딕셔너리 안에 있는 key, value들이 각각의 series이고, key들은 column의 이름이 된다.
dict_data = {'c0':[1,2,3], 'c1':[4,5,6],'c2':[7,8,9], 'c3':[10,11,12], 'c4':[13,14,15]}
df = pd.DataFrame(dict_data)
print(df)
print(type(df))
2. 리스트로 만들기
리스트들로 dataframe을 만들게 되면 리스트들이 하나의 행과 열이 된다.
Series와 유사하게 values 속성은 dataframe에 저장된 데이터를 2차원 배열로 반환한다.
Dataframe도 마찬가지로 딕셔너리로 변경이 가능하다.
df = pd.DataFrame([[14,'남'],[17,'여']],
index = ['a','b'],
columns = ['나이','성별'])
print(df)
print('------')
print(df.index)
print('------')
print(df.values)
print('------')
print(df.to_dict())
Out [32]:
print(df)
print('------')
print(df.index)
print('------')
print(df.values)
print('------')
print(df.to_dict())
Series와 Dataframe을 정리해보자면, 딕셔너리로 만들게 되었을 때 데이터프레임의 열을 하나씩 쌓아가는 형태이고, 리스트로 만들면 행을 하나씩 쌓아가는 형태라고 볼 수 있다.
2.2.2.2 dataframe 조작
1. 열 추가하기
기존 dataframe에 새 열을 추가하는 것은 큰 데이터 셋을 작업할 때 자주 사용된다. 이때 리스트를 dataframe의 행이나 열에 추가하려면 크기(길이)가 동일해야 되고, 그렇지 않으면 오류가 발생한다. 하지만 Series를 추가하게 되었을 땐 해당 index에 존재하지 않을 때엔 결측치(Nan)가 들어가게 된다.
city = ['서울', '분당']
df['지역'] = city
print(df)
df.insert(2,'키',['170','155'])
print(df)
Out [39]:
df['키'] = ['170']
Out [41]:
df = df.assign(도시 = city)
df.loc[:,'도시'] = city
둘 다 index 객체이다. 간단하게 변경하려면 수에 맞게 지정해주기만 하면 쉽게 바꿀 수 있다.
print(df.index)
df.index = ['c','d']
print(df)
3. Rename() 함수사용
위의 방법처럼 하려면 리스트로 넘겨주기 때문에 길이만큼 입력을 해줘야 된다. 그렇게 되었을 때 길이가 맞지 않거나 인덱스를 중복으로 넣는 경우가 생길 수 있으니 함수를 통해 변경하는 것이 좋다. rename(columns={변경 전 열이름, 변경 후 열이름}, inplace=True)로 사용할 수 있고, inplace = True로 옵션을 주게 되면 따로 변수에 넣지 않고 바로 적용이 가능하다.
df.rename(columns={'나이':'연령','성별':'남녀'}, inplace=True)
print(df)
Out [50]:
4. Drop() 행 삭제
위와 같이 index또는 columns을 지정해줘도 되고, axis = 0 or 1을 통해 축을 지정해 줘서 사용할 수도 있다.
df2 = df.copy()
df2.drop(columns='키', inplace = True)
print(df2)
Out [53]:
df2.drop(index='d', inplace = True)
print(df2)
추가로 del예약어를 통해 del df[‘컬럼명' 또는 '인덱스’] 로도 제거가 가능하다.
2.2.2.3 조건 추가 및 추출해보기
df = pd.DataFrame([[14,'남'],[17,'여'],[24,'남'],[20,'여'],[15,'남'],[21,'여']],
index = ['a','b','c','d','e','f'],
columns = ['나이','성별'])
print(df)
Out [58]:
그냥 조건만 달게 된다면 numpy 의 mask 와 같이 series 형태(고정된 길이)로 나오게 된다.
print(df['나이'] > 20)
print(df[df['나이'] > 20])
Out [62]:
기획 및 글 | AI 1팀 김기중
'엑셈 경쟁력 > 시계열 데이터처리 AI 알고리즘' 카테고리의 다른 글
Chapter 2. Pandas 3편 : Time Series 머신러닝을 위한 Python 필수 라이브러리 (0) | 2022.08.25 |
---|---|
Chapter 2. Pandas 2편 : Time Series 머신러닝을 위한 Python 필수 라이브러리 (0) | 2022.08.25 |
Chapter 2. Numpy 2편 : Time Series 머신러닝을 위한 Python 필수 라이브러리 (0) | 2022.07.27 |
Chapter 2. Numpy 1편 : Time Series 머신러닝을 위한 Python 필수 라이브러리 (0) | 2022.07.27 |
Chapter 1. 기초 선형대수 및 통계학 : Time Series 머신러닝을 위한 Python 필수 라이브러리 (0) | 2022.06.27 |
댓글