Python/NumPy | Pandas

[Python] Pandas - Series 1

비번변경 2022. 12. 5. 22:09

Pandas

pandas logo

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)

 

 

참고문서

데이터 사이언스 스쿨 - 4장 판다스 데이터 분석

데이터 사이언스 스쿨 - 4.1 판다스 패키지의 소개