[Python]판다스 - 시리즈 란? (Pandas - Series)
판다스 - 시리즈 란? (Pandas - Series)
Pandas 란?
Pandas(판다스)는 데이터 조작 및 분석 이 가능한 파이썬의 라이브러리다.
Pandas는 머신 러닝, 딥 러닝에서 데이터를 처리 할 때 필수로 사용된다.
Pandas VS numpy
데이터를 처리 하는 파이썬 라이브러리 중 유명한 것이 Pandas, numpy다.
pandas는 numpy와 비슷하면서도 다르다.
아래는 pandas와 numpy의 차이점이다.
기능 / 특성 | Pandas | NumPy |
---|---|---|
데이터 구조 | DataFrame, Series | ndarray |
데이터 유형 | 다양한 데이터 유형 (숫자, 문자열, 날짜 등) 지원 | 동일한 데이터 유형만 처리 (일반적으로 숫자) |
데이터 정렬 및 라벨링 | 라벨링 가능한 축 (행 및 열에 이름 부여) | 배열은 인덱스 또는 정수 인덱스로만 액세스 가능 |
데이터 조작 및 필터링 | 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
댓글
댓글 쓰기