[Python]판다스 - 시리즈 란? (Pandas - Series)

판다스 - 시리즈 란? (Pandas - Series)


Pandas 란?

Pandas(판다스)는 데이터 조작 및 분석 이 가능한 파이썬의 라이브러리다.
Pandas는 머신 러닝, 딥 러닝에서 데이터를 처리 할 때 필수로 사용된다.








Pandas VS numpy

데이터를 처리 하는 파이썬 라이브러리 중 유명한 것이 Pandas, numpy다.
pandas는 numpy와 비슷하면서도 다르다.
아래는 pandas와 numpy의 차이점이다.
기능 / 특성PandasNumPy
데이터 구조DataFrame, Seriesndarray
데이터 유형다양한 데이터 유형 (숫자, 문자열, 날짜 등) 지원동일한 데이터 유형만 처리 (일반적으로 숫자)
데이터 정렬 및 라벨링라벨링 가능한 축 (행 및 열에 이름 부여)배열은 인덱스 또는 정수 인덱스로만 액세스 가능
데이터 조작 및 필터링SQL과 유사한 데이터 조작 및 필터링 지원배열 기반으로 데이터 조작 및 필터링
결측값 처리결측값(NaN) 처리 및 대체 기능 지원결측값 처리 및 대체 기능 없음
데이터 그룹화 및 집계데이터 그룹화 및 집계 기능 지원기본적인 집계 함수만 사용 가능
시계열 데이터 처리효율적인 시계열 데이터 처리 지원시계열 데이터 처리에 제한적
인덱싱 및 슬라이싱다양한 인덱싱 및 슬라이싱 옵션 제공기본적인 슬라이싱 및 인덱싱만 지원
데이터 입출력다양한 데이터 형식을 읽고 쓸 수 있음주로 배열을 파일로 저장하고 읽는 기능
성능 및 메모리 관리일반적으로 느리고 메모리 소비가 높음빠르고 메모리 효율적
주요 사용 사례데이터 분석 및 조작, 데이터 전처리과학 및 수학 계산, 배열 조작
정리 하면 pandas는 데이터 조작 및 분석에 특화되어 있으며 테이블 형식의 데이터에 적합하며, 데이터 프레임, 시리즈, 패널의 데이터 구조를 제공한다.

numpy는 과학 및 수학 계산에 특화되어 있으며 다차원 배열을 다루는 데 뛰어나다.

이때, Pandas는 numpy의 대부분의 기능을 포함하며 더 많은 기능이 있다. 하지만 numpy는 3차원 이상의 배열 데이터를 담을 수 있지만 Pandas는 최대 2차원 데이터 밖에 담지 못한다.(하지만 Pandas에서 CSV 파일을 불러오면 3차원 이상의 데이터를 담을 수 있다.)

즉, 데이터 처리 작업에 따라 두 라이브러리 중 하나를 선택한다.



Pandas import

Pandas 패키지를 설치하고 pd 라는 이름으로 import 해주는 것이 관례다.
import pandas as pd



Pandas 데이터 구조

Pandas는 총 3개의 데이터 구조를 사용하며 이 중 데이터 프레임을 가장 많이 사용한다. 이 중 시리즈 데이터 구조를 알아보자.

- 시리즈(Series)
- 데이터 프레임(DataFrame)
- 패널(Panel)


시리즈

가장 많이 사용되는 데이터 프레임을 사용하기 위해서는 시리즈의 개념을 확실히 짚고 넘어가야 한다.

시리즈는 1차원 배열의 값(values)에 대응하는 인덱스(index)를 부여할 수 있다. 아래 예제를 보자.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"])

print(sr)
<결과>
레쓰비    1000
콜라     2000
맥주     3000
소주     4000
dtype: int64



값, 인덱스

"1000, 2000, 3000, 4000" 이라는 에 각각 "레쓰비, 콜라, 맥주, 소주" 라는 인덱스를 부여 했다.


값, 인덱스 출력

값과 인덱스를 출력 할 수 있다.
print(' : ', sr.values)
print('인덱스 : ', sr.index)
<결과>
값 :  [1000 2000 3000 4000]
인덱스 :  Index(['레쓰비', '콜라', '맥주', '소주'], dtype='object')



name 속성

name 속성을 사용하면 시리즈의 이름을 지정 할 수 있다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"], name = "Example")

print(sr)
<결과>
레쓰비    1000
콜라     2000
맥주     3000
소주     4000
Name: Example, dtype: int64

결과 창을 보면 Name : Example 로 시리즈의 이름을 지정했다.


인덱스 지정 하지 않기

인덱스를 지정 하지 않고  값으로만 시리즈를 생성 할 수 있다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000], name = "Example")

print(sr)

<결과>
0    1000
1    2000
2    3000
3    4000


인덱스를 지정하지 않으면, 인덱스의 값은 0부터 시작하는 숫자가 지정된다.



시리즈 인덱싱 접근

인덱싱 접근도 가능하다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"], name = "Example")

print(sr['레쓰비'])
<결과>
1000



값 바꾸기

인덱스를 접근하여 값도 바꿀 수 있다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"], name = "Example")

sr['레쓰비'] = 5000
print(sr)
<결과>
레쓰비    5000
콜라     2000
맥주     3000
소주     4000
Name: Example, dtype: int64



명시적 인덱스 접근 VS 암시적 인덱스 접근

인덱스 접근 시 인덱스의 이름이 아닌 숫자로도 접근이 가능하다. 이 때 파이썬에서 혼동 하지 말라고 명시적, 암시적 인덱스 접근으로 나눠놨다.



명시적 접근 

loc 속성을  사용하여 명시적 접근 하는 방법이다.
index의 이름을 적어주면 된다. 이 때 숫자를 적으면 에러가 발생한다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"], name = "Example")

print(sr.loc["레쓰비"])
<결과>
1000


암시적 접근 

암시적으로 레쓰비, 콜라, 맥주, 소주 는 각 0,1,2,3번째 인덱스다. 따라서 암시적 접근은 인덱스 이름 대신 정수를 적어준다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"], name = "Example")

print(sr.iloc[0])
<결과>
1000


인덱스 슬라이싱

슬라이싱도 제공한다.
import pandas as pd

sr = pd.Series([1000, 2000, 3000, 4000],index=["레쓰비", "콜라", "맥주", "소주"], name = "Example")

print(sr[0:2])
<결과>
레쓰비    1000
콜라     2000
Name: Example, dtype: int64



딕셔너리로 시리즈 생성

위에 예제는 리스트로 시리즈를 만들었다. 리스트 뿐만 아니라 딕셔너리로도 만들 수 있다.
import pandas as pd

sr = pd.Series({"레쓰비":1000, "콜라":2000, "맥주":3000, "소주":4000}, name = "Example")

print(sr)
<결과>
레쓰비    1000
콜라     2000
맥주     3000
소주     4000
Name: Example, dtype: int64




댓글

이 블로그의 인기 게시물

[Arduino] 아두이노 초음파 센서(HC-SR04) 사용하기

[Arduino] 아두이노 조이스틱 사용하기

[자연 환경] 농약의 장단점 농약이 환경과 인간에게 미치는 영향