Machine_Learning 2

AIginner·2023년 9월 27일
1

MachineLearn

목록 보기
2/9
post-thumbnail

데이터 핸들링 2

전 편의 데이터 핸들링1에 이어서!

  1. 데이터 불러오기/만들기
  2. 데이터 삭제
  3. 결측치 처리
  4. 정렬 (sort)
  5. 자료형 변환
  6. 데이터 탐색
  7. 내장함수
  8. 그룹핑
  9. apply 함수

1. 데이터 불러오기/만들기

1) 데이터 불러오기

pd.read_csv('파일명' index=False)

2) 데이터 저장하기

df.to_csv('파일명', index=False)


2. 데이터 삭제

  • 데이터 프레임 복사(.copy) 선행 : warning 뜨는 것 방지를 위함 (df의 영향을 주지 않기 위해 사본으로 진행)

    data = df.copy()
    data

1) 열(column) 삭제

data = data.drop('column name', axis=1) #data 변수에 저장하는 것 잊지 않기

  • 다른 방법

    data = df.copy() # 다시 호출, 데이터 초기화
    data = data.drop(columns=['컬럼 명','칼럼 명2'...]) # 해당 컬럼 삭제 (여러 컬럼 삭제 가능)

2) 행(row) 삭제

data.drop('인덱스 명',axis=0)

  • 데이터 저장 없이 삭제 하는 방법(inplace=True)

    data.drop('인덱스 명',axis=0, inplace=True)

3) 조건을 주고 행 삭제 (조건 : 가격 >= 14000)

cond = data['컬럼명'] >= 14000
data[cond].index # 인덱스 뽑아 내기
data.drop(data[cond],index, axis=0, inplace=True) # 위에서 뽑아낸 인덱스 행 삭제하기


3. 결측치 처리

1) 결측치가 있는 행 모두 삭제(dropna, axis=0 디폴트 값:생략 가능)

data.dropna(axis=0)

2) 결측치가 있는 열 모두 삭제(dropna)

data.dropna(axis=1)

3) 결측치 채우기 (fillna())

df.innull().sum() # 결측치 존재 여부 확인(False=0,True=1), sum()으로 합계
df['컬럼 명'].fillna('알 수 없음') # 해당 컬럼명에 '알 수 없음'으로 채우기

4) 결측치 채운 데이터 저장하기

df['칼럼 명'] = df['컬럼 명'].fillna('채울 값')


4. 정렬 (sort)

1) 인덱스 기준으로 정렬 (기본값 ascending=True : 오름 차순)

df.sort_index(ascending=Fasle) # ascending=True 디폴트 값, False는 내림차순

2) 값을 기준으로 정렬

df.sort_values('컬럼 명', ascending=False) # 컬럼 명 기준으로 내림차순 정렬

3) 값 기준 여러개 기준으로 정렬 (리스트 형태)

df.sort_values(['컬럼 명', '컬럼 명2'], ascending=[False,True]) # 컬럼 명 내림차순/컬럼명 2는 오름차순

  • 정렬 후 인덱스 값이 섞여 있음

    df.reset_index(drop=True) # 새로운 인덱스 값이 순차적으로 출력, drop=True로 기존 인덱스 삭제


5. 자료형 변환

1) type 확인 (각 컬럼 별)

df.info() # str은 object, 숫자는 int, float

2) 컬럼 명 '호수'를(호수 값 = 10호,11호...) int형으로 변환(str, replace 함수 활용)

df['호수'] = df['호수'].str.replace('호','') # '호수'에서 '호'를 ''로 변환

3) 2번 자료형 변환 (astype, object 형 > int 형)

df['호수'] = df['호수'].astype(int)

  • int형으로 변환하면 산술이 가능하다!

4) 예시 : '호수' 평균 구하기(.mean 내장함수 활용)

df['호수'].mean()


6. 데이터 탐색 (pandas의 내장함수 활용)

1) 데이터 크기 (행, 컬럼) 확인(.shape)

df.shape

2) 컬럼 형태 (type)

df.info()

3) 기초 통계 (.describe : 카운트, 평균, 최대, 최소 등등)

df.describe() # int, float 형만 확인

  • object 값만 확인 방법 (include='0')

    df.describe(include='0')

4) 상관 관계 확인 (int형과 float형의 상관 관계 확인)

df.corr()

5) 항목 종류 수 확인(.nuique())

df.nunique()

6) 항목의 종류 확인(.unique())

df['컬럼 명'].unique()

7) 항목 별 개수 확인(주로 사용)(value_counts())

df['컬럼 명'].value_counts()


7. 내장함수

1) 카운트 (컬럼) , 디폴트 axis=0, 결측치 없는 컬럼만 센다

df.count(axis=1) # 카운트 행

2) 데이터 수 (len,shape 활용)

len(df)
df.shape[0] # 행 값만 찾을때 [0]

3) 최대값 (.max)

df['컬럼 명'].max()

4) 최소값 (.min)

df['컬럼 명'].min()

5) 평균 (.mean)

df['컬럼 명'].mean()

6) 중앙 값(.median)

df['컬럼 명'].median()

7) 합계 (.sum)

df['컬럼 명'].sum()

8) 표준편차 (.std)

df['컬럼 명'].std()

9) 분산 (.var)

df['컬럼 명'].var()

10) 백분위 수(quantile())

df['컬럼 명'].quantile(.25) # 하위 25%의 값
df['컬럼 명'].quantile(.75). # 상위 25%의 값

  • 조건이 있는 경우 (cond 변수 사용, 조건 : 상위 25%, 하위 25% 값)

    cond = df['컬럼 명'].quantile(.25) > df['컬럼 명'] # 하위 25%들의 값
    df[cond]

    cond = df['컬럼 명'].quantile(.75) < df['컬럼 명'] # 상위 25%들의 값

11) 최빈 값 구하기 (.mode)

df['컬럼 명'].mode()[0]

12) 행과 열 바꾸기 (.tranpose)

df.T


8. 그룹핑

1) 컬럼 기준, 평균 구하기 (.groupby)

df.groupby('기준 컬럼명').mean()

2) 기준 컬럼이 2개일 때, 평균 구하기

df.groupby(['컬럼명','컬럼명2']).mean() # 리스트 씌우는 것 잊지 않기, 컬럼명 1부터 기준으로 구함

3) 기준 컬럼 2개일 때, 특정 컬럼의 평균 구하기

df.groupby(['컬럼명','컬럼명2'])['특정 컬럼명'].mean() # 시리즈 형태로 출력 된다

  • 데이터 프레임 형태로 출력하고 싶을 때 1번째 방법
    pd.DataFrame(df.groupby(['컬럼명','컬럼명2'])['특정 컬럼명'].mean())
  • 2번쨰 방법
    df.groupby(['컬럼명','컬럼명2'])[['특정 컬럼명']].mean() # 대괄호 1개는 시리즈, 2개 데이터 프레임

4) 그룹핑 한 데이터를 인덱스 형태로 리셋(.reset_index())

df.groupby(['컬럼명','컬럼명2'])['특정 컬럼명'].mean().reset_index()


9. apply 함수 (데이터 전처리 과정에서 유용하게 쓰임)

1) 컬럼에 조건을 달고 값 출력하기 (컬럼 1300 보다 큰 값과 작은 값)

def cal(x):
if x >= 1300:
return "yes"
else:
return "no"
df['컬럼 명'].apply(cal)

2) 새로운 컬럼 명 생성하기 (위 컬럼 명에 cal 함수 적용한 컬럼 생성)

df['new 컬럼명'] = df['위 컬럼명'].apply(cal)

3) apply, lambda 활용하기 (위와 같은 조건)

df['new 컬럼명'] = df['위 컬럼명'].apply(lambda x : '출력명' if x >= 1300 else '출력명2')

profile
비전공자지만 밑바닥부터 공격적으로 공부중입니다! 공부 해온 것들 정리해보고 있습니다. 잘못 된 부분 있으면 알려주세요~ 서로 공유 하고 싶습니다

0개의 댓글