[TIL] 240326 - Pandas.Dataframe

황지원·2024년 3월 27일

TIL

목록 보기
12/15

개요 🎯


  • 데이터 분석을 하던 과정에서 전체적인 컬럼 데이터를 수정하기 위해 사용하던
  • DB의 데이터를 csv, xls 형태로 변환해서 실제 Python 코드에서 사용하기 위해 일부 구조를 바꾸어 사용하고자 한다.

인사이트 👀


초기 환경

  • 실습을 위한 학생 성적 데이터를 가져옵니다.
    ID학교학년성적
    M000001395
    M000002273
    M000003395
    M000004193
    M000005288
    • import
      import pandas as pd
      import numpy as np

데이터 확인

  1. Dataframe 상위 데이터 확인 (head)

    df.head()
    --------------------
    
      ID	    학교	학년	성적
    0	M000001	고	  1	    76
    1	M000002	중	  2	    84
    2	M000003	중	  2	    69
    3	M000004	고	  1	    73
    4	M000005	중	  3	    70
  2. Dataframe 데이터 정보 (info)

    df.info()
    --------------------
    
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 10 entries, 0 to 9
    Data columns (total 4 columns):
     #   Column  Non-Null Count  Dtype 
    ---  ------  --------------  ----- 
     0   ID      10 non-null     object
     1   학교      10 non-null     object
     2   학년      10 non-null     int64 
     3   성적      10 non-null     int64 
    dtypes: int64(2), object(2)
    memory usage: 448.0+ bytes
  3. Dataframe 요약 정보 (describe)

    df.describe()
    --------------------
    
    			학년	    성적
    count	10.000000	10.00000
    mean	1.800000	78.40000
    std	  0.632456	9.96884
    min	  1.000000	68.00000
    25%	  1.250000	70.75000
    50%	  2.000000	76.50000
    75%	  2.000000	82.75000
    max	  3.000000	100.00000
  4. Dataframe Type 확인 (dtypes)

    df.dtypes
    --------------------
    
    ID    object
    학교    object
    학년     int64
    성적     int64
    dtype: object
  5. Dataframe Column Value의 unique(유일성) 확인 (unique)

    df["학교"].unique()
    --------------------
    
    array(['고', '중'], dtype=object)
  6. Dataframe Column Value의 개수 확인 (value_counts)

    df["학교"].value_counts()
    --------------------
    
    			학교
    고    55
    Name: count, dtype: int64

데이터 추가

  1. 새로운 행(Row)/열(Column) 추가
    • 행(Row) 추가
      df_sub = pd.DataFrame({"ID":["M000006"], "학교":["고"], "학년":[3], "성적":[72]})
      df = pd.concat([df, df_sub], ignore_index=True)
      df
      --------------------
      
      	ID	    학교	학년	성적	  통과
      0	M000001	고	  1	    100  	  False
      1	M000002	중	  2	    80	    False
      2	M000003	중	  2	    69	    False
      3	M000004	고	  1	    73	    False
      4	M000005	중	  3	    70	    False
      5	M000006	고	  3	    72	    NaN
    • 열(Column) 추가
      df["통과"] = False
      --------------------
      
      	ID	    학교	학년	성적	  통과
      0	M000001	고	  1	    100  	  False
      1	M000002	중	  2	    80	    False
      2	M000003	중	  2	    69	    False
      3	M000004	고	  1	    73	    False
      4	M000005	중	  3	    70	    False

데이터 수정

  1. Row의 데이터 수정

    • 인덱스(Index)로 변경
      df.iloc[0, 3] = 100
      --------------------
      
      	ID	    학교	학년	성적
      0	M000001	고	  1	    100
      1	M000002	중	  2	    84
      2	M000003	중	  2	    69
      3	M000004	고	  1	    73
      4	M000005	중	  3    	70
    • 컬럼(Column) 으로 변경
      df.loc[1,"성적"] = 80
      --------------------
      
      	ID	    학교	학년	성적
      0	M000001	고	  1	    100
      1	M000002	중	  2	    80
      2	M000003	중	  2	    69
      3	M000004	고	  1	    73
      4	M000005	중	  3    	70
  2. 조건을 만족하는 Row만 데이터 수정

    df.loc[df["성적"]>70, "통과"] = True
    --------------------
    
    	ID	    학교	학년	성적	  통과
    0	M000001	고	  1	    100  	  True
    1	M000002	중	  2	    80	    True
    2	M000003	중	  2	    69	    False
    3	M000004	고	  1	    73	    True
    4	M000005	중	  3	    70	    False
    5	M000006	고	  3	    72	    True
    df = df.replace({"통과":False}, "Drop")
    df
    --------------------
    
    	ID	    학교	학년	성적	  통과
    0	M000001	고	  1	    100  	  True
    1	M000002	중	  2	    80	    True
    2	M000003	중	  2	    69	    Drop
    3	M000004	고	  1	    73	    True
    4	M000005	중	  3	    70	    Drop
    5	M000006	고	  3	    72	    True
  3. 행(Row)/열(Column) 변경

    • 행(Row) 변경
      df.loc[4] = ["M000004", "고", 1, 85, True]
      --------------------
      
      	ID	    학교	학년	성적	  통과
      0	M000001	고	  1	    100  	  True
      1	M000002	중	  2	    80	    True
      2	M000003	중	  2	    69	    Drop
      3	M000004	고	  1	    85	    True
      4	M000005	중	  3	    70	    Drop
    • 열(Column) 이름 변경
      df = df.rename(columns={"ID":"ID", "학교":"School", "학년":"grade", "성적":"Score", "통과":"Pass"})
      df
      --------------------
      
      	ID			School	grade		Score		Pass
      0	M000001	고	  	1	    	100  	  True
      1	M000002	중	  	2	    	80	    True
      2	M000003	중	  	2	    	69	    Drop
      3	M000004	고	  	1	    	85	    True
      4	M000005	중	  	3	    	70	    Drop

데이터 제거

  1. 행(Row)/열(Column) 제거
    • 행(Row) 제거
      df.drop(5, axis=0)
      --------------------
      
      	ID	    학교	학년	성적	  통과
      0	M000001	고	  1	    100  	  True
      1	M000002	중	  2	    80	    True
      2	M000003	중	  2	    69	    Drop
      3	M000004	고	  1	    73	    True
      4	M000005	중	  3	    70	    Drop
    • 열(Column) 제거
      df.drop("통과", axis=1)
      --------------------
      
      	ID	    학교	학년	성적
      0	M000001	고	  1	    100
      1	M000002	중	  2	    80
      2	M000003	중	  2	    69
      3	M000004	고	  1	    73
      4	M000005	중	  3	    70
profile
함께 도전하고 성장하는 어린 꿀벌, 주니어 개발자 황지원 입니다

0개의 댓글