본문 바로가기

파이선

pandas 시작하기 (chap5)

주제 : pandas

 

# 자료구조

  • Series와 DataFrame가 있다.
  • Series
    • tmp = pd.Series([1,2,-5,-2]) 
      • tmp.values
      • tmp.index
      • tmp = pd.Series([1,2,-5,-2], index=['a','b','c','d'])    index를 통해서 색인을 할당할수 있다
      • data = {"a" : 1, "b":2, "c":3}
        tmp = pd.Series(data)  // 이런식으로 index를 별도로 명명하지 않고 생성 가능
      • 일련의 객체를 담을 수 있는 1차원 배열 같은 자료 구조
    • 고정길이의 정령된 사전형이라고 개념을 잡기
    • 파이선의 사전형(Dictionary)와 비슷한 개념 
    • 색인이라는 데이타 앞에 연관 이름 존재 (기본 적으로 0부터 할당되어짐)
    • 색인을 통해서 값을 추출할수 있다.
      • tmp['a']
      • tmp['a','b','c']
      • tmp[tmp > 0]  : 조건식도 가능하다.
      • 'b' in tmp : Treu / False 체크
      • pd.isnull(tmp) : 색일별로 True, False 표시
      • pd.notnull(tmp)
    • name속성 (DataFrame과 같은 의미를 가지고 있다. 표의 데이타 형태는 DataFrame이다.)
      엑셀표에서 최상단에 빨간색표시처럼 구분선으로 각 역활을 정의할 수 있다.

      • Series 객체와, Series의 색인에 모두 name속성이 있다.
      • tmp.name = "labelcase1"
      • tmp.index.name = "labelcase2"
  • DataFrame
    • 엑셀 같은 시트로 구성되어 있다.
    • 각 컬럼에는 다른 종류의 값을 담을 수 있다.
    • 생성방식 (다양하게 존재한다.)
      • 같은 길이의 List에 저장된 Dictionary를 이용하는 방법 (많이 사용한다)
      • Key,Value를 가지고 있는 형태의 중첩된 Dictionary를 이용하는 방식
      • frame.head() : 상단의 5개만 출력
      • pd.DataFrame(data, columns=['year', 'state', 'pop'] : 컬럼 순서 바꾸기
      • frame.columns : 색인 index정보 출력
      • frame.loc 사용 방법

        • 파란색 박스에 있는 정보 : 보통은 frame['year'] 이런식으로 컬럼명에 대해서 조회를 하는게 일반적이다.
        • 빨강색 박스에 있는 정보는 frame.loc['five'] 이렇게 조회를 한다.
          출력되는 정보를 보면, 가로,세로축의 정보가 교차되어서 출력된다.
      • DataFrame에  Series로 생성된 정보를 색인(Index)를 통해서 업데이트 할 수 있다.
        • val에 생성된 Series정보의 index값으로 frame2에 mapping되는 debt정보를 업데이트 한다.
      • 새로운 컬럼을 넣고 비교 연산이 가능하다
        • 빨강색 박스의 내용이 신규로 들어가면서, 연산을 통해서 계산된 값이 입력되었다.
      • del frame2['pop] : 컬럼을 이용한 삭제
      • 색인 객체
        • 중복값을 허용하지 않는다.
        • ----------------> 컬럼
          -
          -
          -
          -
          index
        • P.197 : 색인 메소드와 속성
  • 주요 기능
    • 재색인
      • pandas의 중요한 기능
      • obj.reindex(색인정보)
        a,b,c순서로 index재생성, 없는것은 nan값으로 넣어줌
      • 활용) 시계열 데이타 생성시, 일자를 기준으로 차트를 구성하려고 하는 경우 
        내가 보유한 데이타는 2010, 2013, 2014, 2015 이렇게 있다고 가정하자 (2011,2012년 데이타가 없다)
        이런경우, 2011, 2012년을 생성하고 데이타는 이전 년도의 데이타를 넣어야지 차트가 그려진다.
        method='ffill' 메소드를 활용
        P. 199에 상세 설명
        빨강색 줄친 부분이 ffill 기능을 이용해서 이전 데이타로 채워진 모습

      •  index뿐만이 아니라, 컬럼에 대해서도 조건을 걸고 reindex를 수행할 수 있다.
        reindex를 통해서 b index의 새로운 사항이 들어갔다.
            P.200 : 재색인 함수 인자 정의되어 있음
      •  컬럼만 지정해서 reindex가 가능하다
        columns=  의 형식으로 입력
      •  loc방식으로 재색인 하는 방식 (가장 선호된다고 한다.)
        frame.loc[['a', 'b', 'c', 'd'], states]
        명식적으로 index를 지정하고, 컬럼도 정의하는 형태
    • 하나의 로우, 컬럼 삭제하기
      삭제를 하려면, 기준이 필요한데 가로축(컬럼항목)과 세로축(색인:index)의 조합으로 삭제가 가능한다.
      · axis=0 : 색인(index)를 의미한다. (명시적으로 axis를 정의하지 않으면, index기준으로 삭제를 한다.)
      · axis=1  or axis='columns' : 컬럼을 의미한다.
      • drop메소드를 사용해서 선택한 값을 삭제한 새로운 객체를 얻을 수 있다.
        • obj.drop('1') : 1개 삭제 (인덱스 기준) 
        • obj.drop(['2','3']) : 복수개 (인덱스 기준) 
        • obj.drop(['2'], axis=1) :  컬럼 기준으로 컬럼 이름이 2인 사항 삭제
        • obj.drop(['2','3'], axis='columns') : 컬럼 기준으로 컬럼 이름이 2,3인 사항 삭제
    • 색인하기, 선택하기, 거르기
      • Series 색인 : 정수가 아닌 문자열도 가능 (Numpy 색인 : 정수만 가능)
        • 인덱스를 지정하는 경우와 순번으로 지정하는 경우 (결국 같은 결과를 의미함)
          샘플데이타
          대상 series로 생성한 변수명이 tmp라고 한다면 (아래 샘플은 Series를 대상으로 한다.!!,)
          Series는 컬럼값이 없이 색인만 존재한다.
          tmp['b'] 와 tmp[1]은 동일하게 1.0이 출력됩니다. 
           - [' '] : index의 이름을 지정하는 패턴 
           - [ ] : index의 0부터 시작하는 순번에 해당하는 값을 식별하는 패턴
      • loc와 iloc 선택 (DataFrame에서 사용하는 것)
        • loc : 정수 색인, index로 선택하는 경우 ??
          • loc를 사용한다고 해서, 무조건 index기반으로만 찾는것은 아닌것 같다
          • loc[1, 'b'] 의미가  색인 1에서 컬럼 'b'를 찾는것이다.
        • iloc : 축, 컬럼으로 선택하는 경우 ??
        • P.208 : loc와 iloc에 대한 API (i로 시작하는 연산자는 곧 사라질 예정이라고 사용을 않기 추천한다고 한다.)
    • 정수색인
      • pandas를 사용중, 리스트나 튜플같은 파이선 자료구와 색인 방식이 다르다. (실수를 많이 한다.)
    • 산술연산, 데이타 정렬
      • 두 색인색인의 통합 (데이타베이스의 join과 유사하다)
      • 각각 생성된 pd.Series 를 통합해서 s1+ s2로 처리 (겹치는 색인이 없는 경우 NA값이 된다.)
      • pd.DataFrame 의 경우 정렬은 로우와 컬럼 모두에 적용된다.
      • 특정 위치에 값을 넣어보기 
        loc메소드 → 색인 검색 후, 컬럼을 검색
        색인 1에서 컬럼 b값을 변경한것
        인자값에 '1'을 입력시 색인 정보로 보지 않고, 새로 row를 생성하여서 들어갔다.
      • na값 특정 값으로 채우기 (fill_value 사용하기)
        • df1과 df2가 있을때, na값을 0으로 채우기
        • df1.add(df2, fill_value = 0)
        • P.214 : 산술연산 메소드 정의됨
        • r로 시작하는 짝꿍 메소드 (각각의 산술연산 메소드는 인자를 뒤집어서 계산하는 메소드를 가진다.)
          - 아래 빨강색과 파란색은 같은 결과를 가진다.
          - 1 / df1 에 사항이 df1.rdiv(1) 의 의미를 가진다.
        • DataFrame과 Series간의 연산
          • Series의 색인을 DataFrame컬럼에 맞추고 아래 row로 전파한다.
          • frame.sub(seris, axis = 'index')
            • axis값은 연산을 적용 할 축 번호이다.
            • axis='index' 나 axis=0은 DataFrame의 row에 대해서 연산을 수행하는 의미
    • DataFrame과 Series간 연산
    • 함수 적용, 매핑
    • 정렬과 순위
    • 중복색인
  • 통계 계산 
    • 상관관계, 공분산
    • 유일값, 값세기, 멤버쉽
    •