이번 글에서는 Pandas 에서 사용하는 자료구조인 Dataframe, 그 기반인 Series, 구성요소인 Index, Column, Value 에 대해 설명하고 이를 확인/생성/수정하는 법에 대해 이야기합니다.
*본 글은 위 영상을 참고합니다.
0. Dataframe 과 Series
Pandas에서는 Dataframe 라는 자료구조를 사용합니다. 우리가 엑셀을 사용하는 방식과 흡사합니다. 사진이 구성요소들을 잘 설명하므로 제 말은 생략합니다.
다시, Dataframe 은 여러 개의 Column(열)과 Row(행)로 만들어졌었습니다.. 반면에 Series 는 단 하나의 Column 과 여러 개의 Row 로 이뤄져있습니다. 아래에서 직접 확인해봅시다.
1. Series 생성과 수정
A. Series 생성
import pandas as pd
visitor = pd.Series([100,125,150,200])
print(visitor)
Series 를 생성하는 가장 기본적인 방법입니다. 월 별 블로그 방문자 수를 생각하고 Series를 생성했습니다. 그럼 이걸 조금 다듬어서 보기좋게 만들고 출력해봅시다.
B. Series 인덱싱, 네이밍, 특정 행 출력
import pandas as pd
visitor = pd.Series([100,125,150,200], index=['Mar', 'Apr', 'May', 'Jun'], name = 'senti-mech')
# index 는 각 월 이름, 시리즈 이름은 senti-mech
print(visitor) #visitor 데이터 전체 출력
print(visitor.iloc[0]) #첫번째 행 데이터 출력
print(visitor['May']) #인덱스 이름으로 값 출력
인덱스를 바꾸고 이름을 붙였습니다.
주의할 점이 하나 있습니다. Index에 이름을 붙이지 않은 채 visitor[0]을 입력하면 데이터가 나오지만, 위 코드처럼 이름을 붙인 뒤 0을 입력하면 경고창이 나옵니다. Series에서 각 행을 숫자로 부르지 않기 때문입니다. 그래서 위치 기반으로 부르려면 특별한 명령어 SeriesName.iloc[pos] 를 사용해야합니다.
2. Dataframe 생성과 수정
A. Dataframe 생성
data = {
'이름' : ['채치수', '정대만', '송태섭', '서태웅', '강백호', '변덕규', '황태산', '윤대협'],
'학교' : ['북산고', '북산고', '북산고', '북산고', '북산고', '능남고', '능남고', '능남고'],
'키' : [197, 184, 168, 187, 188, 202, 188, 190],
'국어' : [90, 40, 80, 40, 15, 80, 55, 100],
'영어' : [85, 35, 75, 60, 20, 100, 65, 85],
'수학' : [100, 50, 70, 70, 10, 95, 45, 90],
'과학' : [95, 55, 80, 75, 35, 85, 40, 95],
'사회' : [85, 25, 75, 80, 10, 80, 35, 95],
'SW특기' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}
data
데이터는 위 유튜브 영상의 설명글에서 가져왔습니다. 데이터 연습은 사용할 데이터를 만들거나 찾기 힘든데 제공해주셔서 너무 감사할 따름입니다.
data 는 딕셔너리 구조로 입력되었습니다. 당연히 data[이름] 하면 이름이 뜹니다.
B. Dataframe 원하는 열(Column)만 추출 및 인덱싱
import pandas as pd
df = pd.DataFrame(data, column = ['이름', '키', '학교'], index = ['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번']) #원하는 열만 가져와서 인덱싱
df #출력
원하는 Column 만 정해서 순서를 바꾼 뒤 인덱싱 해서 넣었습니다.
여기서 print (df) 를 해도 되는데, 저는 df를 했습니다. Jupyter notebook 에서는 이런 객체의 이름이 다짜고짜 나오면 그냥 출력해줍니다. 거기다, print를 붙이는 것보다 예쁘게 출력해줍니다(...)
C. Dataframe 인덱스 네이밍 및 수정
df.index.name='지원번호'
df
위에서 인덱스에 1번, 2번... 을 넣었습니다. 그런데 이게 무엇을 의미하는지 모를 수 있습니다. 그래서 우리는 인덱스에 이름을 부여합니다. df.index.name = '이름'으로 말이죠.
그런데 인덱스가 마음에 들지 않는다면?
df.reset_index() 로 따로 빼내거나, df.reset_index(drop=True) 로 아예 지워버릴 수 있습니다.
하지만 이렇게 해도, df 라는 데이터는 변하지 않습니다. 그래서 아래와 같이 입력해야합니다.
우리는 이를 통해 drop은 기존 인덱스를 Column으로 가져올지 설정하는 것이고, inplace는 실제로 적용할지 설정하는 것이라는 걸 알 수 있습니다.
4. Dataframe 행(row)을 추출하는 법
print(df.loc['1번'])
df.loc[['1번']]
행을 추출할 땐 df.loc[index]를 사용합니다. 하나를 추출할 땐, 대괄호를 한번만 쓰면 위 결과처럼 Series 형태로 출력하고, 대괄호를 두 번 쓰면 Dataframe 형태로 출력합니다.
df.loc[['1번','2번','3번'], ['이름', '학교']]
이렇게 원하는 행에 원하는 열만 가져올 수도 있습니다.
Series 와 Dataframe 의 기본적인 사용 방법에 대해 알아봤습니다. 생각보다 작성에 시간이 많이 쓰이는데, 이렇게 해야 나중에 다시 보기도 쉽고 적으면서 공부가 되니 좋은 것이라 생각합니다. 대체 어떤 데이터를 이용해볼까 했는데, 제 블로그 방문과 검색 데이터를 이용하면 될 듯 합니다. 조금 더 공부하고 시작해보겠습니다.