Series 생성
Pandas에서 Series는 1차원 배열 형태의 데이터를 다룰 때 유용하며, (인덱스, 값)의 구조를 가지고 있습니다. 차후에 사용할 DataFrame에서의 기본 자료구조이기 때문에 간단하게 사용법에 대해 알아 보도록 하겠습니다.
# 리스트로 생성
우선 Pandas의 Series를 생성하는 방법에 대해 알아 봅니다.
파이썬 자료구조의 리스트나 딕셔너리를 이용하여 Series를 만들 수 있습니다. Series는 (인덱스, 값)의 구조를 가지고 있는데, 생성시에 리스트를 사용할 경우 자동으로 정수형 인덱스를 생성해 줍니다.
import pandas as pd
data = [10, 20, 30, 40]
series = pd.Series(data)
print(series)
위의 코드는 아래와 같은 구조를 가지고 있습니다. 인덱스를 설정하지 않았지만 자동으로 설정됩니다.
index | Value |
---|---|
0 | 10 |
1 | 20 |
2 | 30 |
3 | 40 |
# 인덱스 지정하여 생성
리스트를 통해 생성할 때, 별도의 인덱스를 지정하는 것도 가능합니다.
series = pd.Series(data, index=['a', 'b', 'c', 'd'])
print(series)
위의 코드는 아래와 같은 구조를 가지고 있습니다. 인덱스가 변경되었습니다.
index | Value |
---|---|
a | 10 |
b | 20 |
c | 30 |
c | 40 |
# 딕셔너리로 생성
딕셔너리는 (키, 값)의 구조를 가지고 있는데, Series를 딕셔너리로 만들경우 키값이 자동으로 인덱스로 지정됩니다.
data = {'a': 10, 'b': 20, 'c': 30}
series = pd.Series(data)
print(series)
위의 코드는 아래와 같은 구조를 가지고 있습니다. 딕셔너리의 키 값이 인덱스가 되었습니다.
index | Value |
---|---|
a | 10 |
b | 20 |
c | 30 |
주요 기능
다음은 Series의 주요 기능에 대해 알아 보겠습니다.
# 값과 인덱스 접근
앞서 Series는 (인덱스, 값)의 구조를 가지고 있는데, 각각의 속성을 아래와 같이 출력할 수 있습니다.
print(series.values) # [10 20 30]
print(series.index) # Index(['a', 'b', 'c'], dtype='object')
# idex와 value 출력
for idx, val in seri_data.items():
print(idx, val)
# index만 출력
for idx in seri_data.index:
print(idx)
# value만 출력
for val in seri_data.values:
print(val)
# 인덱싱과 슬라이싱
리스트와 유사하게 인덱싱과 슬라이싱이 가능합니다. 만약 연속적이지 않은 인덱스를 선택할 경우 리스트로 인덱스를 넘겨주면 됩니다.
print(series['a']) # 10
print(series[0:2]) # 첫 두 개 요소
print(series[['a', 'c']]) # 인덱스 'a'와 'c' 선택
# Series 연산
Series 간 산술 연산도 가능합니다. 동일한 인덱스끼리 연산되며, 인덱스가 다를 경우 NaN으로 처리됩니다. 아래 2개의 series를 더해보도록 하겠습니다.
seri_a = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
seri_b = pd.Series([4, 5, 6], index=['b', 'c', 'd'])
result = seri_a + seri_b
print(result)
# 결과:
# a NaN
# b 6.0
# c 8.0
# d NaN
📌데이터의 값이 비어있거나 잘못된 형식이라서 숫자로 변환할 수 없는 경우, Pandas는 해당 위치를 NaN으로 채워서 표시합니다.
만약 두개의 Series연산에서 인덱스가 일치하지 않을 경우, 0으로 변환해서 계산하고자 하는 경우는 아래와 같이 코드를 수정 할 수 있습니다.
seri_a = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
seri_b = pd.Series([4, 5, 6], index=['b', 'c', 'd'])
result = seri_a.add(seri_b, fill_value=0) # 덧셈
#result = seri_a.sub(seri_b, fill_value=0) # 뺄셈
#result = seri_a.mul(seri_b, fill_value=0) # 곱셉
#result = seri_a.div(seri_b, fill_value=0) # 나눗셈
print(result)
# 결과:
# a 1.0
# b 6.0
# c 8.0
# d 6.0
# Series 필터링
Series 데이터의 조건을 지정하고 그 조건에 만족하는 데이터만 출력할 수도 있습니다. 과일 갯수가 20개 이상인 것만 출력하도록 조건을 지정하면, apple은 출력되지 않는 것을 볼 수 있습니다.
fru_seri = pd.Series(index=['apple','banana','cherry'],data=[10,20,30],name='과일') # 열 이름을 지정
fru_seri[fru_seri >= 20]
# 결과:
# 과일
#banana 20
#cherry 30
# NaN 값 처리
dropna와 fillna 를 사용하여 NaN값을 제거하거나, 0으로 대체 할 수 있습니다.
seri = pd.Series([1, None, 3, None, 5])
print(seri.dropna()) # NaN 값 제거
# 결과:
# 0 1.0
# 2 3.0
# 4 5.0
print(seri.fillna(0)) # NaN 값을 0으로 대체
# 결과:
# 0 1.0
# 1 0.0
# 2 3.0
# 3 0.0
# 4 5.0
Leave a comment