[PYTHON]Pandas 판다스

신동혁·2022년 8월 18일
0

PYTHON

목록 보기
3/8

Pandas란?

판다스는 파이썬 라이브러리의 한 종류로 데이터 분석을 위한 기능을 탑재한 라이브러리다. 보통 pd라는 별칭으로 호출된다.

1.주요구성

  • Series : 행, 열과 같은 1차원 구조

    • Series로 만들기(튜플, 리스트, 넘파이배열(array)를 받는다)

      data = ["안녕","하세","요"]
      result = pd.Series(data)
    • index : 일반적인 index와 딕셔너리 key 성질을 합친 느낌이다. 디폴트값으로 0,1,2... 의 숫자값이 부여되고 따로 설정할 경우 딕셔너리의 key처럼 직접 인덱스명을 설정할 수 있다. 즉, 하나의 데이터는 index명과 index(정수0,1,2...) 두 가지 값을 가지는 것이다.

      data = ["안녕","하세","요"]
      result = pd.Series(data, index=["첫번째","두번째","세번째"])
      
      result.index=[바꿀인덱스명들] # 모든 인덱스를 적어줘야 한다. 특정 인덱스명만 바꾸려면 다른 방식 이용해야 한다.
    • indexing : Series 원소 중 한 개만 호출

      Series객체명[index명 / index] # 이 방법은 기본적으로 index명으로 조회를 하게 된다. index명에 존재하지 않으면 그 뒤에 index에서 찾는다.
      # 예를 들어 index명이 100이고 index는 0 인 value값은 "Series객체명[100]"으로 호출해야 조회가 된다. 이때 index명대신 index로 조회하고 싶다면
      # "Series객체명.iloc[index]" 로 조회해야 한다. 즉, "Series객체명[100]" 과 "Series객체명.iloc[0]"는 같은 것이다.
      • fancy indexing : 조회할 인덱스들을 리스트로 묶어서 여러개 호출해 Series로 반환
        Series객체명[[index명1,index명2,index명3,...]]
    • slicing : Series 원소 중 일부분 잘라내기

      Series객체명[start index : end index : step] # start 이상 end 미만
      # 혹은
      Series객체명[start index명 : end index명 : step] # start 이상 end 이하

      이때 조심해야 할 것이 파이썬에서 list의 slicing은 deep copy지만, pandas의 Series의 slicing은 shallow copy로 원본이 바뀌면 슬라이싱한 부분도 같이 바뀌게 된다. 만약 deep copy하고 싶다면 copy()를 사용한다.

      s=pd.Series([1,2,3,4,5])
      s2=s[2:].copy()
      print(s,s2)
      # 출력결과 : 1,2,3,4,5    3,4,5
      # copy메서드로 deep copy 실행함
      print("_________________________________")
      s[3]=99
      print(s,s2)
      # 출력결과 : 1,2,3,99,5    3,4,5
      # 즉, deep copy가 되어 서로 영향을 주지 않음
    • boolean 연산 : True나 False를 이용해 True인 값들만 뽑아내는 방식. and,or,not 대신 &,|,~ 를 사용한다.

      import numpy as np
      s=pd.Series(np.random.randint(10,20,20))
      s[(s > 15) & (s < 18) ] # s에서 해당조건을 만족하는(True인) 값들만 반환
      np.where((s > 15) & (s < 18)) # s에서 해당조건을 만족하는 값들의 index값들을 array로 반환
    • head / tail 메서드 : 앞에서 혹은 뒤에서부터 지정한 개수만큼 반환(디폴트값 : 5개)

    • size 속성 : 데이터 개수 반환

    • dtype 속성 : value 타입 반환

    • astpye 메서드 : value 타입 변경해서 새로운 Series객체로 반환

    • sort_values 메서드 : 값을 기준으로 오름차순 정렬 후 새로운 Series객체로 반환

      • 매개변수 ascending = True / False 로 오름차순 / 내림차순 가능
    • sort_index 메서드 : index명을 기준으로 오름차순 정렬 후 새로운 Series객체로 반환

      • 매개변수 ascending = True / False 로 오름차순 / 내림차순 가능
    • isin 메서드 : iterable(리스트, 튜플 등)을 매개변수로 받아 해당 값들이 Series에 있는지 없는지 확인 후 True, False 값으로 Series객체 반환( (Series객체명==체크값1) | (Series객체명==체크값2) | ... 와 같다 )

    • 통계 메서드

      • min() : 최댓값
      • max() : 최솟값
      • mean() : 평균값
      • median() : 중위값
      • sum() : 총합
      • std() : 표준편차
      • var() : 분산
      • quantile(q=[나눌위치들(ex. 0.1, 0.5)]) : 분위수로 나누기
      • describe() : 수치형 Series는 데이터개수,4분위수,min,max,평균,표준편차를 반환 / 범주형 Series는 데이터개수,최빈값개수,최빈값,고유값개수 반환
    • 결측치 메서드

      • 결측치 제외 개수 : count()
      • 결측치 확인 : notnull() / isnull() / np.isnan("Series객체명")
      • 결측치 제거 : dropna()
      • 결측치 다른값으로 대체 : fillna(대체할값)
        • inplace : True / False 를 통해 Series객체에 대체한 내용 적용시킬지 결정
  • Dataframe : 행렬과 같은 2차원 구조

    • columns 속성 : colum명 조회
    • index 속성 : index명 조회
    • shape 속성 : 행, 열 개수 조회
    • info 메서드 : 인덱스 정보, 컬럼 정보를 조회
    • 통계 메서드
      • min() : 컬럼별 최댓값
      • max() : 컬럼별 최솟값
      • mean() : 컬럼별 평균값
      • median() : 컬럼별 중위값
      • std() : 컬럼별 표준편차
      • var() : 컬럼별 분산
      • quantile(q=[나눌위치들(ex. 0.1, 0.5)]) : 컬럼별 분위수로 나누기
      • describe() : 요약 통계량 제공
    • 결측치 메서드
      • 결측치 제외 개수 : count()
      • 결측치 확인 : notnull() / isnul() / np.isnan("Series객체명")
      • 결측치 제거 : dropna()
      • 결측치 다른값으로 대체 : fillna(대체할값)
        • inplace : True / False 를 통해 Series객체에 대체한 내용 적용시킬지 결정

2.유용한 함수들

인덱스, 컬럼 추가하기

  • 데이터프레임["새로운 컬럼명"] : 마지막 컬럼으로 새로운 컬럼이 추가된다.
    < 사용방법 >
    데이터프레임["새로운 컬럼명"] = ["새로운 값"]
  • insert() : 원하는 위치의 컬럼으로 새로운 컬럼이 추가된다.
    < 사용방법 >
    데이터프레임.insert(columns, # 새로운 컬럼을 추가해줄 컬럼 위치
    					columns명, # 새로운 컬럼명
                      value # 새로운 값
                      )
  • 데이터프레임.loc["인덱스"] : 해당 인덱스가 이미 존재하면 해당 인덱스의 레코드를 변경하고, 존재하지 않다면 마지막 인덱스로 해당 인덱스와 값을 추가한다.
    < 사용방법 >
    데이터프레임.loc["인덱스"] = ["새로운 값"]
  • concat(), iloc[] : 원하는 위치의 인덱스로 새로운 인덱스가 추가된다. 이때 concat을 사용하므로 새로운 인덱스를 데이터프레임으로 만든 후 넣어준다.
    < 사용방법 >
    새롭게 넣어줄 데이터프레임명 = pd.DataFrame(["새로운값"],
    										  columns = 데이터프레임명.columns
                                            )
    데이터프레임명.concat(
                         [
                         데이터프레임명.iloc[:n], # 해당 데이터프레임에서 n-1인덱스까지 +
                         새롭게 넣어줄 데이터프레임명, # 넣어줄 데이터프레임 +
                         데이터프레임명.iloc[n:] # 해당 데이터프레임에서 n인덱스부터 끝까지 +
                         ],  
                        ignore_index = False # 기존 index를 유지할지 여부
                       )

인덱스, 컬럼 삭제하기

  • drop() : 특정 index, column 삭제하기
    < 사용방법 >
    데이터프레임명.drop(columns="컬럼명", # 삭제할 컬럼명
    					index="index명", # 삭제할 index명
                      inplace=False # 기존 데이터프레임에 반영할지 여부
                      )

인덱스, 컬럼 수정하기

  • rename() : 특정 index명, columns명 변경하기
    < 사용방법 >

    데이터프레임명.rename(index={}, # key로 기존index명 value로 바꿀index명
                      columns={}, # key로 기존column명 value로 바꿀column명
                      inplace=False # 기존 데이터프레임에 반영할지 여부
                      )
  • rename_axis() : index나 columns가 무엇을 나타내는지에 대한 이름 변경하기
    (인덱스명이 사과, 수박, 참외라면 rename_axis로 인덱스는 과일이라는 이름을 줄 수 있다.)
    < 사용방법 >

    데이터프레임명.rename_axis(mapper, # 이름부여
    	                     axis, # axis 선택
                             inplace=False # 기존 데이터프레임에 반영할지 여부
                      )
  • set_index() : index를 변경하기. 이때 전체적으로 변경도 가능하고 특정 인덱스만 골라서 변경도 가능하다.
    < 사용방법 >

    데이터프레임명.set_index(keys, # index로 사용할 컬럼명
                          drop=True, # key로 받은 컬럼을 지울지 여부
                          append=False, # 기존 index 삭제 여부
                          inplace=False, # 기존 데이터프레임에 반영할지 여부
                          verify_integrity=False # index 중복 체크 여부
                          )
  • reset_index() : 기존 index를 삭제하기. 이때 index를 컬럼으로 빼낼 수도 있고 그냥 삭제할 수도 있다.
    < 사용방법 >

    데이터프레임명.reset_index(level=None, # 디폴트값은 None으로 모두 지운다. 멀티 인덱스일 경우 지울 level 설정
                              drop=False, # 디폴트값은 False로 삭제된 index는 컬럼에 추가된다. 이때 컬럼에 추가시키고 싶지 않다면 True 처리한다
                              inplace=False, # 기존 데이터프레임에 반영할지 여부
                              col_level=0,
                              col_fill=''
                              )

그룹 별 확인하기

  • value_counts() : feature별 데이터 개수 세기
    < 사용방법 >

    데이터프레임.value_counts(dropna=True, # 결측치도 세는지 설정
    						ascending=True, # 오름차순 설정
                         normalize=True, # 비율로 반환할지 설정
                         bins=n # 연속형자료의 경우 n만큼 구간을 나눠 세준다)
  • groupby : dsfsdf

    • filter() :

    • transform() : 집계함수를 통한 결과를 추가할 때 유용하다.(평균값 컬럼을 추가 or 개수 컬럼을 추가 ...) transform()은 집계함수 결과를 해당 칸(값)에 대신 넣어서 새로운 데이터프레임을 반환한다.
      < 사용방법 >

      groupby처리된데이터프레임.transform(func, # 집계함수같이 groupby된 데이터프레임의 Series에 적용할 함수 
                                        *args # 앞선 func함수의 매개변수
                                        )

      ex) 예시 : 데이터(레코드)별 해당 직업의 총 인원 컬럼 추가해주기

      test = pd.DataFrame({
        "직업":["선생님","선생님","학생","학생","무직"],
        "이름":["A","B","C","D","E"]
        })

      => test 출력

      직업이름
      0선생님A
      1선생님B
      2학생C
      3학생D
      4무직E
      result = test.groupby("직업")
      result2 = result.transform("count")

      => result2 출력

      이름
      02
      12
      22
      32
      41
      test["해당직업을 가진 인원수"] = result2

      => test 출력

      직업이름해당직업을 가진 인원수
      0선생님A2
      1선생님B2
      2학생C2
      3학생D2
      4무직E1

피봇테이블(그룹 별 나눠서 표현하기)

  • pivot_table() : groupby는 그룹으로 설정한 컬럼들이 모두 인덱스 쪽에 표시되어 결과값이 굉장히 길게 표시될 수 있다.(ex. 나이별, 성별 groupby 결과 ==> index에 (10대,남),(10대,여),(20대,남),(20대,여)... ) 이때 그룹으로 설정한 컬럼들을 컬럼에도 표시할 수 있게해(ex. index에 (10대),(20대) columns에 (남),(여) 이런식으로 표현 가능) groupby 결과값을 더 쉽게 확인할 수 있게 커스터마이징할 수 있는 것이 pivot_table이다.

    < 사용방법 >

    데이터프레임명.pivot_table(
    				   values="체크할컬럼명",
                     index="피봇테이블 인덱스로 사용할 이름",
                     columns="피봇테이블 컬럼으로 사용할 이름",
                     aggfunc=["집계함수명"],
                     fill_value="결측치에 대입할 값",
                     dropna=True, # 결측치 삭제할지 여부
                      margins=True, # 합계에 대한 표시 여부
                      margins_name="피봇테이블 합계컬럼,인덱스로 사용할 이름"
                     )

    ex) 예시 : flights 데이터프레임에서 AIRLINE별, ORG_AIR별 CANCELLED의 총합값을 확인하고 싶을 때

    flights.pivot_table(
     				 values="CANCELLED",
                     index="AIRLINE", ############# 인덱스명으로 사용됨 ###########
                      columns="ORG_AIR", ############## 컬럼명으로 사용됨 ###########
                     aggfunc=["sum"],
                      fill_value=999,
                      margins=True,
                      dropna=True,
                      margins_name='All'
                     )
    AIRLINE('sum', 'ATL')('sum', 'DEN')('sum', 'DFW')('sum', 'IAH')('sum', 'LAS')('sum', 'LAX')('sum', 'MSP')('sum', 'ORD')('sum', 'PHX')('sum', 'SFO')('sum', 'All')
    AA3486331133542154
    AS00000000000
    B699900999009990011
    DL2810011401238
    EV18627369999996530999146
    F9021011140010
    HA99999999999900999999000
    MQ59996209990085999999152
    NK116011310299925
    OO325210015441933142
    UA291233622531993
    US002210067321
    VX99999999999903999099936
    WN913999999732199962593
    All6961187741770242593288881

일괄처리(전체 데이터 처리)

  • apply() : 모든 데이터에 대한 일괄 처리가 필요할 때 많이 사용한다.

    < 사용방법 >

    # Series / DataFrame 사용가능
    # DataFrame 기준으로 설명
    데이터프레임명.apply(함수명,
                       axis=기준축(0,1 ...), # 디폴트값: 0
                       args=함수에 필요한 매개변수들(튜플형식) or **kwarg(함수  에 필요한 매개변수들 키워드 인자 형식)
                       )

    ex) 예시 : 특정 컬럼들의 값들에만 모두 +10 해주기

    test = pd.DataFrame({
      "A":[1,2,3,4,5],
      "B":[1,2,3,4,5],
      "C":[1,2,3,4,5],
    })

    => test 출력

    ABC
    0111
    1222
    2333
    3444
    4555

    여기서 A컬럼과 C컬럼 데이터들에만 +10을 해준다.
    1) 람다식 사용방식

    test[["A","C"]] = test[["A","C"]].apply(lambda x:x+10)

    2) 일반함수 사용방식

    def func(x,val):
    	return x+val
    test[["A","C"]] = test[["A","C"]].apply(func, axis=0, val=10)

    => test 출력

    ABC
    011111
    112212
    213313
    314414
    415515

구간(범위) 나누기

  • cut() / qcut() : 지정한 값을 기준으로 구간(범위)을 나눠줄 수 있다.
    cut은 범위 기준으로, qcut은 개수를 기준으로 나눠준다. 예를 들어 1~100범위에 총 10개 데이터가 존재할 때 2부분으로 cut을 하면 1~50, 50~100으로 나뉘고 2부분으로 qcut을 하면 데이터 5개, 데이터 5개로 나뉘게 된다.

    < 사용방법 >

    pd.cut(x, # x는 Series나 list같은 1차원 자료구조
          bins, # 리스트 or 정수, 리스트일경우 구간의 경계값들 포함하고 정수일 경우 지정한 개수만큼 동일한 범위로 구간 나눈다
          right=True, # 디폴트값 True로 구간경계의 오른쪽값을 포함하는지 여부 결정
          lables=[] # 구간의 이름들을 담은 리스트 형식
          )
          
    pd.qcut(x, # x는 Series나 list같은 1차원 자료구조
    		q, # 정수로 나눌 구간의 개수를 지정한다
          labels=[] # 구간의 이름들을 담은 리스트 형식
    )

    ex) 예시 : 키를 기준으로 작은 키,중간 키,큰 키 범위 나눠 표시하기

    test = pd.DataFrame({
      "이름":["홍길동","이순신","세종대왕","을지문덕","염라대왕","예수",],
      "키":[170,160,162,175,180,188]
    })

    => test 출력

    이름
    0홍길동170
    1이순신160
    2세종대왕162
    3을지문덕175
    4염라대왕180
    5예수188
    
    height_category = pd.cut(test["키"],
                          3,
                          right=False,
                          labels=["작음","중간","큼"]
                          )

    => height_category 출력
    0 중간
    1 작음
    2 작음
    3 중간
    4 큼
    5 큼

    test["키범위"]=height_category

    => test 출력

    이름키범위
    0홍길동170중간
    1이순신160작음
    2세종대왕162작음
    3을지문덕175중간
    4염라대왕180
    5예수188

데이터프레임 합치기

  • concat() : 단순하게 데이터프레임을 합치는 방식이다. 컬럼명이 같은 열끼리 합치고, index명이 같은 행끼리 합친다. 즉, 같은 구조를 가진 데이터프레임을 합치는 느낌이다.

    < 사용방법 >

    pd.concat(objs, # 합칠 데이터프레임들 리스트
    			keys=[], # 합쳐진 행들을 구분하기 위한 추가 인덱스들 리스트
               axis=0, # 디폴트값은 0으로 합칠 기준축을 설정
               join='outer',
               ignore_index=True # 디폴트값은 False로 index명은 가져오지 않고 모두 새롭게 0부터 부여할지 여부 결정한다
               ) # 디폴트값은 outer로 합치는 컬럼이나 인덱스에 대한 차이가 있을 경우 처리 방식을 설정

    ex) 예시 : 2016, 2017년도 데이터프레임 합치기
    s_2016, s_2017 데이터프레임이 다음과 같다고 가정한다.
    => s_2016 출력

    SymbolSharesLowHigh
    0AAPL8095110
    1TSLA5080130
    2WMT405570

    => s_2017 출력

    SymbolSharesLowHigh
    0AAPL50120140
    1GE1003040
    2IBM877595
    3SLB205585
    4TXN5001523
    5TSLA100100300
    result = pd.concat([s_2016,s_2017],keys=[2016,2017])

    => result 출력

    SymbolSharesLowHigh
    (2016, 0)AAPL8095110
    (2016, 1)TSLA5080130
    (2016, 2)WMT405570
    (2017, 0)AAPL50120140
    (2017, 1)GE1003040
    (2017, 2)IBM877595
    (2017, 3)SLB205585
    (2017, 4)TXN5001523
    (2017, 5)TSLA100100300
  • join() : 조인을 통해 데이터프레임을 합치는 방식이다. 위에서 설명한 단순한 데이터프레임 합치기 방식인 concat()은 join의 full outer join 방식이라고 생각할 수 있다. 조인은 인덱스를 기준으로 서로 다른 데이터프레임(컬럼이 다른)을 합치는 방식이다. 즉, 조인의 핵심은 인덱스를 비교하고 싶은 값으로 변경한 후 조인하는 것이다.

    < 사용방법 >

    데이터프레임1.join(데이터프레임2,
    				  how="left", # 디폴트값은 left로 join 방식을 설정(left,right,inner)
                     lsuffix="_1", # 컬럼명이 같을 경우 데이터프레임1 컬럼명 뒤에 붙일 이름
                     rsuffix="_2" # 컬럼명이 같을 경우 데이터프레임2 컬럼명 뒤에 붙일 이름
                     )

    ex) 예시 : 같은 컬럼의 값을 기준으로 join하기
    s_2016, s_info 데이터프레임이 다음과 같다고 가정한다.
    => s_2016 출력

    SymbolSharesLowHigh
    0AAPL8095110
    1TSLA5080130
    2WMT405570

    => s_info 출력

    SymbolName
    0AAPLApple Inc
    1TSLATesla Inc
    2WMTWalmart Inc
    3GEGeneral Electric
    4IBMIBM(International Business Machines Co)
    5SLBSchlumberger Limited.
    6TXNTexas Instruments Incorporated
    7AMZNAmazon.com, Inc

    이때 우린 Symbol값(AAPL, TSLA, WMT ...)들을 이용해 join시켜 볼 것이다. 위에서 join은 인덱스를 기준으로 비교한다고 했으므로 해당 Symbol컬럼을 인덱스로 만들어준다.

    s_2016.set_index("Symbol",inplace=True)
    s_info.set_index("Symbol",inplace=True)

    => s_2016 출력

    SymbolSharesLowHigh
    AAPL8095110
    TSLA5080130
    WMT405570

    => s_info 출력

    SymbolName
    AAPLApple Inc
    TSLATesla Inc
    WMTWalmart Inc
    GEGeneral Electric
    IBMIBM(International Business Machines Co)
    SLBSchlumberger Limited.
    TXNTexas Instruments Incorporated
    AMZNAmazon.com, Inc
    s_info.join(s_2016)

    디폴트값이 left 조인이 실행되어 s_info의 모든 인덱스는 그대로 나오고 해당 인덱스와 같은 값을 지닌 s_2016의 인덱스들만 조인되었다. 그리고 컬럼명은 중복되는 것이 없어 lsuffix나 rsuffix는 설정하지 않았다.
    => 조인 출력

    SymbolNameSharesLowHigh
    AAPLApple Inc8095110
    TSLATesla Inc5080130
    WMTWalmart Inc405570
    GEGeneral Electricnannannan
    IBMIBM(International Business Machines Co)nannannan
    SLBSchlumberger Limited.nannannan
    TXNTexas Instruments Incorporatednannannan
    AMZNAmazon.com, Incnannannan
  • merge() : 위에서 설명한 조인과 비슷하다. 다른점은 join은 인덱스를 기준으로 합치지만 merge는 컬럼명을 기준으로 합친다.(인덱스를 기준으로 합칠 수도 있음)

    < 사용방법 >

    데이터프레임1.merge(데이터프레임2,
                      how='inner', # 디폴트값 inner로 조인방식 설정(right,left,inner)
                      on="컬럼명", # 조인할 공통 기준 컬럼명 설정
                      left_on=None, # 조인할 데이터프레임1 기준 컬럼명 설정
                      right_on=None, # 조인할 데이터프레임2 기준 컬럼명 설정
                      left_index=False, # 조인할 데이터프레임1 기준 인덱스 사용 여부
                      right_index=False, # 조인할 데이터프레임2 기준 인덱스 사용 여부
                      suffixes=["_1","_2"] # 디폴트값 _x, _y으로 중복된 컬럼에 대한 suffix처리할 수 있는 리스트
                      )

    ex) 예시 : 같은 컬럼의 값을 기준으로 merge하기
    s_2016, s_info 데이터프레임이 다음과 같다고 가정한다.
    => s_2016 출력

    SymbolSharesLowHigh
    0AAPL8095110
    1TSLA5080130
    2WMT405570

    => s_info 출력

    SymbolName
    0AAPLApple Inc
    1TSLATesla Inc
    2WMTWalmart Inc
    3GEGeneral Electric
    4IBMIBM(International Business Machines Co)
    5SLBSchlumberger Limited.
    6TXNTexas Instruments Incorporated
    7AMZNAmazon.com, Inc

    join 예시에서는 이 상황에서 해당 컬럼들을 인덱스로 바꾸고 join 해줬다. 하지만 merge는 이 상태 자체에서 merge가 가능하다.

    s_2016.merge(s_info, on="Symbol", how="right")

    right join이 되어 s_info가 기준테이블로 잡히고 양쪽 데이터프레임에서 "Symbol"이란 컬럼명을 서로 join시키게 된다.

    SymbolNameSharesLowHigh
    0AAPLApple Inc8095110
    1TSLATesla Inc5080130
    2WMTWalmart Inc405570
    3GEGeneral Electricnannannan
    4IBMIBM(International Business Machines Co)nannannan
    5SLBSchlumberger Limited.nannannan
    6TXNTexas Instruments Incorporatednannannan
    7AMZNAmazon.com, Incnannannan

구조 변경하기

  • to_frame() : 시리즈에서 데이터프레임으로 바꾸기
    < 사용방법 >

    a=pd.Series([1,2,3,4,5])
    a.to_frame()

    => a 출력

    0
    01
    12
    23
    34
    45

    즉, 시리즈가 아닌 데이터프레임 형태로 출력되는 모습을 확인할 수 있다.

  • stack() / unstack() : stack은 컬럼을 인덱스로 unstack은 인덱스를 컬럼으로 만들어준다. 이때 기존에 존재하던 컬럼이나 인덱스가 있다면 stack이나 unstack으로 바꿔준 새로운 인덱스나 컬럼은 기존 인덱스나 컬럼 하위로 들어가 멀티 인덱스, 멀티 컬럼 형태가 된다. 반대로 stack이나 unstack으로 멀티 인덱스나 멀티 컬럼에 사용하면 하위 단계 인덱스나 컬럼부터 변경된다.
    < 사용방법 >

    데이터프레임명.stack()
    데이터프레임명.unstack()
  • melt() : 컬럼을 녹여서 값으로 바꿔주는 함수다. 즉, 컬럼으로 분류되어 있던 컬럼명들을 값들로 바꿔 일일이 데이터(레코드)에 넣어주는 것이다.
    < 사용방법 >

    데이터프레임명.melt(id_vars=[], # 유지할 컬럼명
    		  value_vars=[], # 값으로 녹여낼 컬럼명
            var_name="값이 된 컬럼명을 가지는 컬럼명",
            value_name="기존 값을 가지는 컬럼명",
            )
  • pivot() : 데이터 프레임에서 두 개 이상의 범주형 변수를 그룹으로 묶어 특정 값을 보려고 할때 사용할 수 있다.
    < 사용방법 >

    데이터프레임.pivot(index="state",
                     columns="fruit",
                     values="count"
                     )
profile
개발취준생

0개의 댓글