ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 # 원소 개수 다르면 대소 비교 불가
유사명문 코린이 유치원