-
[Pandas] 01 Series - 개념, 생성, 인덱싱, 슬라이싱코린이 유치원/Pandas 2022. 6. 20. 00:14
01 Series 개념
- 1차원 자료 구조(순서를 한 방향으로만 표현)
- DataFrame의 한 행이나 한 열을 표현
- index를 사용하여 접근 가능
- index는 순번과 지정한 이름 두가지로 구성.
- index 명을 지정하지 않으면 순번이 index가 됨
- 순번은 0부터 1씩 증가하는 정수
- 벡터화 연산(element - wise 연산) 지원
- Series 객체에 연산을 하면 각각의 series 원소들에 연산이 된다.
- Series를 구성하는 원소들을 다루는 다양한 메소드 제공
02 Series 생성
구문: pd.Series(배열형태 자료구조)
- 배열형태자료구조 - 리스트,딕셔너리,튜플,넘파이 배열
import pandas as pd s = pd.Series([1, 2, 3, 4, 5]) print(s)
index명 지정 Series: 딕셔너리로 작성
d = { '가':1, '나':2, '다':3 } s2 = pd.Series(d) s2
index명 지정 Series: 매개변수로 작성
s3 = pd.Series([98, 95, 100, 100, 100], index = ['국어', '영어', '과학', '수학']) s3
Series/Data Frame - index명은 중복가능
s5 = pd.Series(range(10), index = list('AAABBBCCCC)) s5 s5['A'] # A인덱스 지정된 값 모두 조회 S5['A':'B'] # 첫번째 A부터 마지막 B까지 # index명 중복된경우 첫번째 시작 start index명 ~ 마지막 end index명
03 Series 접근
01 Indexing
- index 순번으로 조회
- Series[순번]
- Series.iloc[순번]
- index 이름으로 조회
- Series[index명]
- Series.loc[index명]
- Series.index명
- index명이 문자열일 경우 .표기법 사용가능
- 팬시 인덱싱
- Series[index 리스트]
- 여러 원소 조회 시 조회할 index를 list로 전달
index(순번)으로 조회
print(s3[0], s3[1]) # 양수 index print(s3[-1], s3[-2]) # 음수 index
iloc 인덱싱
print(s3.iloc[0], s3.iloc[1]) print(s3.iloc[-1], s3.iloc[-2])
index 이름명 조회
# index 이름명 조회 print(s3['영어'], s3['수학]) # loc 인덱싱 print(s3.loc['국어'], s3.loc['과학']) # .표기법 print(s3.국어, s3.과학)
팬시 인덱싱
s3[[0, 1, 2]] s3[['국어', '수학']]
02 Slicing
- Series[start index: end index: step]
- start index 생략: 0번 부터
- end index
- index 순번일 경우 포함 하지 않는다.
- index명의 경우는 포함
- end index 생략: 마지막 index까지
- step 생략: 1씩 증가
- slicing의 결과를 변경시 원ㅇ본도 같이 바뀐다.
- 시리즈이름.copy(): Series를 복사한 새로운 객체 반환
Series[순번] 슬라이싱
s4 = pd.Series(range(10), index = list('abcdefghij')) s4 s4[3:8] # step 1 s4[3:8:2] # step 2 s4[3:] # 3 ~ 마지막 s4[3::3] # 3 ~ 마지막, step3 s4[:7] # 시작 index 생략 0부터 s4[7:1:-1] # 역순 인덱싱 s4[::-1] # 역순 인덱싱
Series[인덱스명] 슬라이싱
s4['e':'j'] # 인덱스명으로 슬라이싱할 땐 end index도 포함해서 조회 s4['j':'e':-2] # 역순 슬라이싱 가능
03 Boolean 인덱싱(Masking)
- Series의 indexing 연산자에 boolean 리스트를 넣으면 True인 index의 값들만 조회
- Boolean 연산자들을 이용해 원하는 조건의 값들을 조회 가능
- 다중 조건일 경우 반드시 ( )로 조건 묶기
연산자 설명 & and 연산자 | or 연산자 ~ not 연산자 bool list로 인덱싱
s3 = pd.Series([70, 20, 100, 200, 50]) bool_index = [True, True, False, False, True] s3[bool_index] # True와 같은 index 값들 조회
조건 검색
s3 >= 100 # bool 값 반환 s3[s3 >= 100] # 100이상인 값만 반환
두가지 조건 검색
s3[(s3 >= 50) & (s3 <= 150)] # and 사용 못함 연산자 사용하고 괄호()로 묶기
04 shallow copy/deep copy
- deep copy(깊은 복사)
- 원본의 카피본을 반환. 값 변경 시 원본은 변경되지 않음
- 파이썬 리스트는 slicing 시 deep copy
- indexing은 deep copy
- shallow copy(얕은 복사)
- 원본을 반환하여 값 변경시 원본에 영향
- Series, DataFrame, ndarray는 slicing 조회시 shallow copy
- copy() 메소드
- Series, DataFrame, ndarray를 복사하여 반환
import pandas as pd s1 = pd.Series(range(10, 101, 10)) s1
indexing 이용한 값 변경
s3['영어'] = 99 s3[0] = 100 s3
팬시 인덱싱으로 값 변경
s1[[1, 4, 7, 8]] = 1000, 4000, 7000, 8000
슬라이싱으로 값 변경
s1[:4] = 1234
05 벡터화(연산)
- Elements-wise 연산
- Numpy 배열(ndarray)와 마찬가지로 Series 객체 연산을 하면 Series 내의 원소 별 연산
Series 연산
import pandas as pd s2 = pd.Series(range(10)) s2 + 10
Series간의 연산
s10 = pd.Series([1, 2, 3]) s20 = pd.Series([10, 20, 30]) s30 = pd.Series([100, 200, 300], index = ['가', '나', '다']) s40 = pd.Series([1, 2, 3, 4, 5]) s10 + s20 # 연산 가능 s20 > s10 # 대소비교 가능 s10 + s30 # 인덱스명 다르면 계산 불가 s10 + s40 # 개수가 다르면 길이가 같은 것까지 계산 s10 > s40 # 원소 개수 다르면 대소 비교 불가
'코린이 유치원 > Pandas' 카테고리의 다른 글
[Pandas] 03 DataFrame - 개념, 생성, 파일, 불러오기, 메소드 (0) 2022.06.20 [Pandas] 02 Series - 메소드 (0) 2022.06.20