Pandas
Python에서 데이터를 다룰 때 빠질 수 없는 패키지로, pandas를 이용하면 다양한 방법으로 데이터를 조작할 수 있다.
대부분의 데이터는 시계열(Series)이나 표(Table) 형태로 나타낼 수 있는데, pandas는 이러한 데이터를 다룰 수 있도록 Series, Dataframe 클래스를 제공한다.
패키지 import
pandas 패키지를 import 할 때는 관례적으로 pd라는 이름을 사용한다.
import pandas as pd
Series
NumPy에서 제공하는 1차원 배열과 유사하지만 데이터의 의미를 나타내는 index를 붙일 수 있다. 데이터는 value에 해당한다.
생성
리스트나 1차원 배열 형식의 데이터를 Series 클래스 생성자로 전달하면 Series 클래스 객체를 만들 수 있다.
만약 index를 전달한다면 데이터의 길이와 동일한 길이의 index를 전달해야 한다. index의 값은 label이라고 하며 문자열, 날짜, 시간, 정수 등이 가능하다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s
# 실행 결과
서울 9904312
부산 3448737
인천 2890451
대구 2466052
dtype: int64
index를 지정하지 않으면 0부터 시작하는 정수 값으로 설정된다.
s = pd.Series([9904312, 3448737, 2890451, 2466052])
s
# 실행 결과
0 9904312
1 3448737
2 2890451
3 2466052
dtype: int64
Series의 인덱스와 값은 Series.index, Series.values 속성으로 접근할 수 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s.index
s.values
# 실행 결과
Index(['서울', '부산', '인천', '대구'], dtype='object')
array([9904312, 3448737, 2890451, 2466052], dtype=int64)
데이터나 인덱스에 이름을 붙이고 싶다면 name 속성을 이용한다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s.name = "인구"
s.index.name = "도시"
s
# 실행 결과
도시
서울 9904312
부산 3448737
인천 2890451
대구 2466052
Name: 인구, dtype: int64
연산
NumPy 배열과 같이 벡터화 연산을 지원한다. 다만 값에만 적용되며 인덱스는 변하지 않는다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s/100000
# 실행 결과
서울 99.04312
부산 34.48737
인천 28.90451
대구 24.66052
dtype: float64
인덱싱
NumPy 배열에서 지원하는 인덱싱 외에 인덱스 라벨을 이용하여 인덱싱할 수 있다. 슬라이싱 또한 가능하다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s[1], s['부산']
# 실행 결과
(3448737, 3448737)
배열을 이용해 인덱싱을 하면 자료의 순서를 바꾸거나 일부만 선택할 수 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s[[0, 2]]
# 실행 결과
서울 9904312
인천 2890451
dtype: int64
조건에 해당하는 자료만을 선택할 수도 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s[s > 3000000]
# 실행 결과
서울 9904312
부산 3448737
dtype: int64
슬라이싱을 하면 부분적인 시리즈를 반환하며, 인덱스 라벨을 사용하여 슬라이싱할 수도 있다. 인덱스 라벨이 문자열인 경우에는 콜론 기호 뒤에 오는 값도 포함된다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s[1:2]
s['부산':'인천']
# 실행 결과
부산 3448737
dtype: int64
부산 3448737
인천 2890451
dtype: int64
인덱스 라벨이 영문인 경우, 속성에 접근하는 것처럼 .을 이용해 접근할 수 있다.
s = pd.Series([9904312, 3448737, 2890451, 2466052],
index=['Seoul', 'Busan', 'Incheon', 'Deagu'])
s.Deagu, s.Busan
# 실행 결과
(2466052, 3448737)
참고문서