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(subset=['Cabin','Age']) //해당 열에서 결측지 있으면 해당 열 제거
- 결측값 대치
- 특정 컬럼의 결측값을 특정 값으로 변경
- 데이터명[컬럼명].fillna(대치할값)
df1['Age'] = df1['Age'].fillna(-1)
df1['Age'] = df1['Age'].fillna(round((df1['Age'].mean())))
- 데이터명[컬럼명].fillna(대치할값)
- 결측값을 바로 위의 값과 동일하게 변경
- 데이터명.fillna(method='ffill')
df.fillna(method='ffill').tail()
- 데이터명.fillna(method='ffill')
- 결측값을 바로 아래의 값과 동일하게 변경
- 데이터명.fillna(method='bfill')
df.fillna(method='bfill').tail()
- 데이터명.fillna(method='bfill')
- 특정 컬럼의 결측값을 특정 값으로 변경
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=결합방법)
-
- 아래의 두 개의 데이터셋을 결합하면 다음과 같다.