[python] 파이썬 Pandas Series


파이썬 Pandas Series에 대해서

Pandas Series

pandas : python의 data analysis의 핵심 library
pandas는 고유하게 정의된 두개의 자료구조를 이용(시리즈, 데이터프레임)

pandas Series : numpy의 1차원 배열과 유사하다.

  • 시리즈 안에 값들이 같은 데이터 타입을 가진다.
  • ※ numpy는 모든 타입을 넣을 수 있지만 series는 불가능

Pandas

Pandas Library
데이터 분석 라이브러리

Pandas Library

  • pandas : python의 data analysis의 핵심 library
  • pandas는 고유하게 정의된 두개의 자료구조를 이용(시리즈, 데이터프레임)
  • pandas Series : numpy의 1차원 배열과 유사하다.
  • 시리즈 안에 값들이 같은 데이터 타입을 가진다. ※ numpy는 모든 타입을 넣을 수 있지만 series는 불가능
  • pandas DataFrame : numpy의 2차원 배열과 유사하다. ※ 3차원 배열과 유사한건 없음.
  • Series를 여러개 컬럼형태로 모아 놓은게 DataFrame이라고 한다.
  • 다른 데이터 타입을 가져도 된다.

  • 터미널 실행
          $ KANGs-MacBook-Pro ~ $ cd ~
            ↳ cd ~ : 최상위 폴더로 이동
    
  • 가상환경 접속
          $ KANGs-MacBook-Pro ~ $ source activate data_env
    
  • Pandas 설치
          $ (data_env) KANGs-MacBook-Pro:~ kang$ conda install pandas
          Solving environment: done
            
            
          ==> WARNING: A newer version of conda exists. <==
            current version: 4.5.12
            latest version: 4.6.4
            
          Please update conda by running
            
              $ conda update -n base -c defaults conda
            
            
            
          ## Package Plan ##
            
            environment location: /anaconda3/envs/data_env
            
            added / updated specs: 
              - pandas
            
            
          The following packages will be downloaded:
            
              package                    |            build
              ---------------------------|-----------------
              pytz-2018.9                |           py36_0         261 KB
              pandas-0.24.1              |   py36h0a44026_0        10.1 MB
              ------------------------------------------------------------
                                                     Total:        10.3 MB
            
          The following NEW packages will be INSTALLED:
            
              pandas: 0.24.1-py36h0a44026_0
              pytz:   2018.9-py36_0        
            
            
          Proceed ([y]/n)? y
           ↳ 설치를 원할 시 y 버튼을 클릭하고 엔터!
    
            
          Downloading and Extracting Packages
          pytz-2018.9          | 261 KB    | ##################################### | 100% 
          pandas-0.24.1        | 10.1 MB   | ##################################### | 100% 
          Preparing transaction: done
          Verifying transaction: done
          Executing transaction: done
    
  • 이제 jupyter notebook에서 판다스 import 사용 가능.

import pandas as pd

  • pandas를 사용하기 위해서는 module을 import 사용해야한다.
  • 일반적으로 as(얼리아싱)을 써서 pd라고 정해서 사용한다.(전세계적으로 pd를 쓴다.)

Numpy Array & Pandas Series 비교

    import numpy as np    # numpy
    import pandas as pd   # pandas 모듈을 쓸때 보통 numpy 모듈과 함께 쓴다.
    
    ## numpy array 만드는 방식--------------------------------------------------------------
    print("<numpy array 만드는 방식>","-"*50)
    
    # numpy 배열(list를 가지고 만드는 예제)
    arr = np.array([-1,5,10,99])
    
    # numpy array의 data type을 확인
    print("타입 :",arr.dtype)   # 결과값 : 타입 : int64
    print("-정수", arr)         # 결과값 : -정수 [-1  5 10 99]
    
    # numpy 배열을 생성할 때 data type(실수)을 지정할 수 있다.   dtype=np.float64
    arr = np.array([-1,5,10,99], dtype=np.float64)   # 해당 데이터 타입으로 지정해서 만들 수 있다.
    arr = np.array([-1,5,10,99], np.float64)   # (첫번째 인자값, 두번째 타입 지정) 그래서 dtype= 생략가능
    print("타입 :",arr.dtype)   # 결과값 : 타입 : float64
    print("-실수", arr)         # 결과값 : -실수 [-1.  5. 10. 99.]
    
    # numpy 배열을 생성할 때 data type(문자열)을 지정할 수 있다.   dtype=np.str
    arr = np.array([-1,5,10,99], dtype=np.str)   #해당 데이터 타입으로 지정해서 만들 수 있다.
    print("타입 :",arr.dtype)   # 결과값 : 타입 : <U2
    print("-문자", arr)         # 결과값 : -문자 ['-1' '5' '10' '99']
    
    # numpy 배열을 생성할 때 data type(객체)을 지정할 수 있다.   dtype=np.object
    arr = np.array([-1,3.14,"Hello",True], dtype=np.object)   #타입이 다 다르니 객체로 만들면 된다.
    print("타입 :",arr.dtype)   # 결과값 : 타입 : object
    print("-객체", arr)         # 결과값 : -객체 [-1 3.14 'Hello' True]
    
    
    
    ## pandas Series 만드는 방식--------------------------------------------------------------
    print("<pandas Series 만드는 방식>","-"*50)
    s = pd.Series([-1,5,10,99], dtype=np.object)   # (데이터, 타입)
    # series는 리스트와 딕셔너리를 합친 것과 같다.
    # 1차원 형태이다. 앞: 인덱스, 뒤: 값     # series는 인덱스와 값을 같이 가지고 있다.
    #                    0    -1
    #                    1     5
    #                    2    10
    #                    3    99
    #                    dtype: object
    display(s)                 # Series를 console에 출력
    print(s.index)             # Series에서 index 정보만 출력  
    # 결과값 : RangeIndex(start=0, stop=4, step=1)
    
    print(s.values)            # Series가 가지고 있는 값의 정보만 출력.  
    # 결과값 : [-1 5 10 99]     # 1차원 형태의 numpy array가 return 된다.
    
    print(type(s.values))      # s.value가 어떤 class의 객체인지 확인가능 
    # 결과값 : <class 'numpy.ndarray'>

Series에 대한 indexing과 slicing

    import numpy as np
    import pandas as pd
    
    # Series에서 인덱스값을 다르게 할 수 있다. 숫자나 문자로 재정의 할 수 있다.
    # ()괄호 안에는list를 쓰는게 편하기 때문에 쓰는거지만, numpy array나 dictionary를 써도 된다.
    s = pd.Series([1,-5,10,99], index=["c","b","a","k"])
    print(s)
    # 기본(숫자) 인덱스(재정의)   값       # 인덱스를 재정의할 수 있으며 숫자 인덱스를 쓸수도 있다.
    #   0         c            1       # index를 재정의 함과 동시에 기존의 숫자 index도 사용 가능
    #   1         b            -5      # 인덱스(key), 값(value) 처럼 쓸 수 있다. 그래서 dictionary같다.
    #   2         a            10
    #   3         k            99
    # dtype: int64
    
    # 위와같이 index를 재정의했음에도 동시에 기존의 숫자 index도 사용 가능  #둘다 혼용해 사용 가능
    print("s[0]의 값은 : {}".format(s[0]))   #-> index 0번째 배열의 값 : 1 출력
    print("s[0]의 값은 : {}".format(s["c"]))   #-> index c번째 배열의 값 : 1 출력
    
    
    
    # slicing(기본 index 값으로 slicing)
    print("s[0:3]의 값은 : \n{}".format(s[0:3]))
    # 결과값 : 
            s[0:3]의 값은 :
            c     1
            b    -5
            a    10
            dtype: int64
    
    # slicing(재정의한 index 값으로 slicing)
    # 재정의한 index는 [앞:뒤] 모두 inclusive ※ 주의해야한다.
    print("s['c':'a']의 값은 : \n{}".format(s["c":"a"])) 
    # 결과값 : 
            s['c':'a']의 값은 : 
            c     1
            b    -5
            a    10
            dtype: int64

Series 안의 데이터 출력 방법(1)&(2)

    import numpy as np
    import pandas as pd
    
    # Series안의 데이터를 모두 합해서 출력(지양) - (1) 좋지 않은 방법
    result = 0.0      # ※ result 변수에 sum 등의 함수값을 변수이름으로 적으면 좋지 않다.
    for tmp in s:
        result += tmp
    print(result)     # 결과값 : 105.0
    
    # Series안의 집계함수를 써서 출력(지향) - (2) 좋은 방법
    print("Series안의 데이터 총합 : {}".format(s.sum()))
    # 결과값 : Series안의 데이터 총합 : 105

Series 생성하는 방법 list() & dictionary{ : }, 이름부여

  • Series를 생성하는 방법 중에 list를 이용하는 방법이 있다.
  • ex) s = pd.Series([1,2,3,4,5])
  • Series를 dictionary를 이용해서 만들 수 있다.
      import numpy as np
      import pandas as pd
        
      my_dict = {"서울" : 3000, "인천" : 5000, "제주" : 2000}
      s = pd.Series(my_dict)
      print(s)
      # 결과값 : 
              서울    3000
              인천    5000
              제주    2000
              dtype: int64
        
      # Series에 이름을 부여할 수 있다.
      s.name = "지역별 가격 데이터"
      print(s)
      # 결과값 : 
              서울    3000
              인천    5000
              제주    2000
              Name: 지역별 가격 데이터, dtype: int64
        
      # Series index의 이름을 부여할 수 있다.
      s.index.name = "지역명"
      print(s)
      # 결과값 : 
              지역명
              서울    3000
              인천    5000
              제주    2000
              Name: 지역별 가격 데이터, dtype: int64
        
      # index를 수정할 수 있다.
      idx = ["SEOUL","INCHEON","JEJU"]
      s.index = idx
      print(s)
      # 결과값 : 
              SEOUL      3000
              INCHEON    5000
              JEJU       2000
              Name: 지역별 가격 데이터, dtype: int64
    

References

개발자님들 덕분에 많이 배울 수 있었습니다. 감사의 말씀 드립니다.





© 2020. GANGPRO. All rights reserved.