이번 포스팅과 다음 포스팅은 파이썬 판다스의 Series(시리즈)와 DataFrame(데이터프레임)을 사용할 때, 자주 사용하는 유용한 메서드들을 정리해보려고 한다. 먼저 시리즈와 데이터프레임이 무엇인지, 어떻게 만드는지를 알아보고 이 두가지를 다룰 때 어떤 메서드를 자주 사용하는지 알아보자!
이번 편은 시리즈와 데이터프레임이 무엇인지를 알아보자.
포스팅에서 사용한 코드는 이 깃허브에서 다운로드하시면 됩니다 :)
✔Table of Contents
1. 시리즈 & 데이터프레임 만들기
시리즈(series)와 데이터프레임(dataframe)은 데이터를 다루는 데 특화된 형태라고 할 수 있다.
먼저, 우리가 자주 보게 되는 데이터프레임(df)은 행과 열의 2차원 형태로 구성되어 있다. df에서는 열을 컬럼(column)이라고 하고, 행은 인덱스(index) 라고 부른다.
그리고 시리즈(series)는 df에서 하나의 열만 똑 떼어낸 것이라고 보면 된다. 즉, 1차원이다.
이제 시리즈와 데이터프레임을 직접 하나씩 만들어 보자.
1-1. 시리즈
pd.Series([리스트], index)
시리즈는 인덱스를 가지는데, 지정하지 않으면 디폴트로 0부터 차례대로 숫자 인덱스가 부여된다.
예를 들어 1반의 수학 성적 데이터로 시리즈를 만들어보면 다음과 같다.
import pandas as pd
# 예시) 1반의 수학 성적 데이터
pd.Series([89, 72, 54, 100, 92, 37, 49])
오른쪽과 같이 index를 지정하지 않았더니 자동으로 0~6의 숫자 인덱스가 부여되었다. 만일 인덱스를 부여한다면?
# 인덱스 지정: 학생 이름
pd.Series([89, 72, 54, 100, 92, 37, 49],
index = ['anna', 'albert', 'dino', 'florence', 'harry', 'justin', 'james'])
오른쪽처럼 왼쪽에 학생 이름 인덱스가 부여되었다.
lucy라는 학생의 성적이 누락되었다고 하자. 이 경우 간단하게 append를 활용해 추가해줄 수 있다.
# lucy의 성적이 빠졌다. 간단하게 추가를 해보자.
math_s = pd.Series([89, 72, 54, 100, 92, 37, 49], index = ['anna', 'albert', 'dino', 'florence', 'harry', 'justin', 'james'])
lucy = pd.Series([50], index = ['lucy'])
math_s.append(lucy)
그런데 위의 경우에는 인덱스가 학생 이름이라서 상관없지만, 따로 인덱스가 지정되어 있지 않은 경우엔 그냥 숫자 인덱스가 부여된다고 했었다.
그렇다면 위처럼 append를 해도 자동으로 숫자 순서대로 부여될까?
# 인덱스 지정을 안 한다면? -> 인덱스 번호까지 디폴트 값으로 변화되진 않는다.
math_s = pd.Series([89, 72, 54, 100, 92, 37, 49])
lucy = pd.Series([50])
math_s.append(lucy)
아쉽게도 인덱스 번호까지 숫자 순서대로 변화하진 않는다. 맨 마지막 값은 '0' 으로 붙여졌다.
이게 싫다면 ignore_index = True 옵션을 사용해주면 된다!
# 이런 경우엔 ignore_index를 사용해주자! (c.f.뒤에 나오겠지만 df의 경우는 reset_index도 사용가능)
math_s.append(lucy, ignore_index = True)
1-2. 데이터프레임
pd.DataFrame({딕셔너리}, index, columns)
- 데이터프레임은 시리즈와는 다르게 2차원이므로, 인덱스(행 이름)뿐만 아니라 컬럼(열 이름)값도 가진다. 그래서 넣어주는 옵션이 index, columns로 2개이다.
- 처음 만들 때 index, columns를 지정하지 않아도 다른 명령어로 지정할 수 있다!
- df.index = [ ] / df.columns = [ ] 를 사용하자.
- 인덱스 초기화를 하려면 df.reset_index()를, 새로운 컬럼을 인덱스로 지정하려면 df.set_index()
앞서 만들었던 1반의 수학 성적 데이터에 정보를 추가해보자. 성적뿐만 아니라, 나이 정보도 추가하였다.
# 앞에서 만들었던 1반의 수학성적 데이터
## 인덱스: 학생 이름, 열: 성적, 나이
math_df = pd.DataFrame({'score': [89, 72, 54, 100, 92, 37, 49],
'age': [12, 15, 10, 9, 8, 11, 12]},
index =['anna', 'albert', 'dino', 'florence', 'harry', 'justin', 'james'],
columns = ['score', 'age'])
math_df
위와 같이 인덱스로는 학생의 이름, 두 개의 열은 성적(score), 나이(age) 이다.
여기서 인덱스를 리셋시켜보자.
1) 인덱스 리셋: reset_index()
# 인덱스 리셋
math_df2 = math_df.reset_index()
math_df2
인덱스를 리셋시키면 위 이미지처럼 원래 지정되어 있던 학생 이름이 'index' 라는 새로운 열로 만들어진다.
reset_index()에는 drop 이라는 옵션이 있는데, 이를 사용하게 되면 기존의 인덱스가 아예 사라진다.
math_df2 = math_df.reset_index(drop = True)
math_df2 #drop = True 지정 시 인덱스가 사라짐.
2) 기존 컬럼을 인덱스로 지정: set_index()
반대로, 기존의 특정 컬럼을 새로운 인덱스로 지정할 수도 있다.
위의 케이스에서 'score' 열을 인덱스로 지정해보자.
# 다시 인덱스 지정
## 다만 set_index는 기존의 컬럼만 인덱스로 설정 가능
math_df3 = math_df2.set_index('score')
math_df3
3) 인덱스 지정: df.index = [리스트]
하지만 위의 경우에는 기존에 존재하고 있는 컬럼만 인덱스로 지정할 수 있다는 단점이 있다.
아예 새로운 값을 인덱스로 지정하기 위해선 아예 데이터프레임의 index 메서드로 지정하자.
# 완전히 새로운 인덱스로 지정하고 싶은 경우: df.index 사용
math_df2
math_df2.index = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
math_df2
4) 컬럼 지정: df.columns = [리스트]
마찬가지로 컬럼값도 바꿔줄 수 있다! 위와 비슷한 방법을 사용한다.
# df.columns로 컬럼명도 변경 가능
math_df2.columns = ['s', 'a']
math_df2
이번 포스팅이 시리즈와 데이터프레임의 기본적인 기능을 알아봤다면,
다음 포스팅에서는 시리즈와 데이터프레임에서 자주 사용하는 중요 메서드를 알아보자 :)
'Skillset > Python, Git' 카테고리의 다른 글
python sample 함수 사용법과 예제 (0) | 2022.07.04 |
---|---|
[pandas] Series & DataFrame에서 자주 사용하는 유용한 메서드 (2) (0) | 2022.06.27 |
파이썬 데이터프레임 인덱싱하기 - python dataframe indexing, slicing (0) | 2022.06.23 |
[pandas] 결측치가 특정 개수, 특정 비율 이상인 열 drop하는 방법 (0) | 2022.06.22 |
[pandas] 결측치 다루기 - 결측치 확인, 결측치 처리(NaN drop, interpolate) (0) | 2022.06.21 |