Python

dataframe 3 - 데이터 가공

retill28 2024. 7. 5. 05:03

1. 결측값 처리 

  • isna(): 결측값을 True로 반환합니다.
  • notna(): 결측값을 False로 반환합니다.

  • 결측값 제거 : 데이터명.dropna(axis=0, how='any', subset=None)  
    • axis : {0: index / 1: columns}
    • how : {'any' : 존재하면 제거 / 'all' : 모두 결측치면 제거}
    • subset : 행/열의 이름을 지정합니다.
    • df.dropna(axis=1)         // 결측지 있는 열 제거 
      df.dropna(how='any')    // 결측지 존재하면 행 삭제 
      df.dropna(subset=['Cabin','Age'])   //해당 열에서 결측지 있으면 해당 열 제거 
  • 결측값 대치
    • 특정 컬럼의 결측값을 특정 값으로 변경
      • 데이터명[컬럼명].fillna(대치할값)
        df1['Age'] = df1['Age'].fillna(-1)
        df1['Age'] = df1['Age'].fillna(round((df1['Age'].mean())))
    • 결측값을 바로 위의 값과 동일하게 변경
      • 데이터명.fillna(method='ffill')
        df.fillna(method='ffill').tail()
    • 결측값을 바로 아래의 값과 동일하게 변경
      • 데이터명.fillna(method='bfill')
        df.fillna(method='bfill').tail()

 

 

 

2. 타입 변환

  • 데이터명[컬럼명].astype(타입) - Passengerid 타입이 int64에서 object로 변환 
  •  
  • 결측치가 있어서 타입변환이 안된다면, 결측지 대치를 한다음 타입변환을 한다. 
    df['Age'].fillna(-1).astype(int)
    df1['Age'] = df1['Age'].fillna(-1).astype(int)
    df1['Age'] = df1['Age'].fillna(-1).astype(int).replace(-1, np.nan)    #-1로 돌렸던 결측치를 다시 nan으로

 

 

 

 3. apply

  • 사용자 정의 함수를 데이터에 적용하고 싶을 때 사용한다.
  • .형식 : 데이터프라임[열이름] .apply(함수, axis=0/1)

  • lambda 함수와 결합해서 쓸 수도 있다.
    df1['pclass_sibsp_lambda'] = df1.apply(lambda x: 1 if x['Pclass'] == 1 and x['SibSp'] == 1 else 0, axis=1)

 

  •  
  •  
  •  

4. map 함수 

  • 값을 특정 값으로 치환하고 싶을 때 사용합니다.
  • 데이터명[컬럼명].map(매핑 딕셔너리)
  • male, female 값에 따라 남자, 여자로 매핑 

 

 

 

 

 

 

5. 문자열 처리 

 

사용하는 예시 
 
df2['Name'].str.contains('Mrs')
df2['Name'] = df2['Name'].str.replace(',', '')
df2['Name'].str.split(' ')
df2['Name'].str.lower()
df2['Name'].str.upper()

 

 

 

 

6. 데이터 결합

  • 두 개의 데이터를 컬럼을 기준으로 결합한다. 
  • 아래와 같은 4가지 방법이 있다. 
  • pd.merge(데이터1, 데이터2, on=기준컬럼, how=결합방법)
  •  
  • 아래의 두 개의 데이터셋을 결합하면 다음과 같다. 

원본 데이터 셋 A와 B
how 옵션 참고할 것.