KT 에이블스쿨 복습

[KT 에이블스쿨 5기] DX트랙 3주 3일차 복습_데이터프레임 변경(3)

리니끄적 2024. 3. 6. 17:08

**셀프 복습용으로 작성한 것이라 실수가 있을 수 있습니다!

혹시 실수를 발견하시면 댓글로 알려주시면 감사드리겠습니다 :)

 

08 데이터프레임 변경 (3)

데이터프레임 합치기(Concat)

concat() 함수를 사용해 인덱스 값을 기준으로 두 데이터프레임을 가로 또는 세로로 합침

 

가로로 합치기

- axis=1 옵션을 지정해 가로로 합칠 수 있음

- 두 개의 데이터프레임에서 같은 인덱

결측치 자료형은 float(실수임)

 

1) 데이터 불러오기

- 두 개의 데이터프레임을 불러옴!

 

2) 데이터프레임 합치기

- 가로로 합칠 때는 axis=1 옵션을 지정

- join='outer'는 기본 옵션값으로 생략이 가능! 해당 옵션을 지정하면 결측치가 생김!

- 합칠 데이터 프레임은 리스트로 여러 개 작성 가능

# 모든 열 합치기
pop = pd.concat([df1, df2], axis=1,join='outer')

 

 

세로로 합치기

- axis=0 옵션을 지정해 세로로 합칠 수 있음 (기본값)

1) 데이터 불러오기

- 두 개의 데이터프레임을 불러옴!

 

2) 데이터프레임 합치기 

- 세로로 합칠 때는 axis=0 옵션을 지정

- join='outer'는 기본 옵션값으로 생략이 가능! 데이터를 합친 후 인덱스가 뒤죽박죽 됨!

- 인덱스 값이 중복될 수도 있으므로 인덱스 초기화

- 합칠 데이터 프레임은 리스트로 여러 개 작성 가능

# 모든 행 합치기
pop = pd.concat([df1, df2], axis=0,join='outer')

# 인덱스 초기화
pop.reset_index(drop=True, inplace=True)

 

 

데이터프레임 조인(Merge)

- merge() 함수는 한 번에 두 개의 데이터프레임만 합칠 수 있음 (세로로 합칠 수 없음)

- 지정한 키 값을 기준으로 병합 가능 (left, right, outer, inner)

- on = '열 이름' : 어느 열을 기준으로 할 것인지, how = 'inner' : 어느 방식으로 할 것인지 결정

- 두 데이터프레임에 같은 이름의 열이 있으면 on 옵션 지정 안 해도 그 열을 기준으로 조인됨

**그래도 기준 열을 명시적으로 지정하기를 권고!

- how = 'inner'옵션은 기본 옵션값이므로 생략 가능

 

#inner 조인
변수선언 = pd.merge(df1, df2, on='같은 이름의 열', how='inner')

#outer 조인
변수선언 = pd.merge(df1, df2, on='같은 이름의 열', how='outer')

 

 

 

 

 

 

 

 

종합실습 01 개념 정리 (기억 안 남 or 실수)

- df.shape: 데이터프레임 크기 확인, 뒤에 괄호 없음!

- df['열 이름'].min(axis=0): 특정 열의 최솟값 확인, 열을 감싸는 대괄호 두 개! axis=0 옵션 지정

- .columns: 열 정보 확인, 전체 열 속성 변경, 이름 변경, 전체 열 순서 변경 모두에 사용 가능!

- .dropna(axis=0, inplace=True): 결측치가 있는 모든 행 제거, 속성 주의!

 

 

종합실습 02 개념 정리 (기억 안 남 or 실수)

- 여러 열 집계: 대분류 별 열1, 열2의 합계/개수/평균을 구하시오.

df_new = df.groupby(by='대분류 별 열 이름', as_index=False)[['계산할 열1', '계산할 열2']].sum/count/mean()..

 

- 범주값에 따른 열 추가: 특정 열의 값 기준에 따라 등급 갖는 Level 열 추가

bin = [-np.inf, 범주값1, 범주값2, 범주값3, np.inf]
label = ['등급1', '등급2', '등급3', '등급4', '등급5']
df['열 이름'] = pd.cut(df['특정 열 이름'], bins=bin, labels=label)

 

- 데이터프레임 내 특정 열 값을 기준으로 정렬하기

df = df.sort_values(by = '열 이름', ascending=False)  #내림차순
df.sort_values(by = '열 이름', ascending=False, inplace=True)  #inplace=True 잊지마라!!!!

 

 

 

- 그래프 시각화

plt.rc('axes', axisbelow=True)                  #눈금선 그래프 뒤로 보내기 
plt.figure(figsize=(5,3))
plt.bar(x=df['열 이름'], height=df['열 이름']) 
plt.title('그래프 타이틀', pad=15, size=15, fontweight='bold') 
plt.xlabel('x축 이름')
plt.ylabel('y축 이름')
plt.grid(axis='y')                               #눈금선 추가
plt.show()

 

 

- df['열 이름'].astype('float'): 실수로 변환 .astype('object'): 문자열로 변환

 

- 여러 열 제거

drop_cols(변수) = ['제거할 열1', '제거할 열2', '제거할 열3']
df.drop(drop_cols, axis=1, inplace=True)

 

- 열 이름 변경

df.rename(columns={'이전 열 이름':'바꿀 열 이름'}, inplace=True)

 

- 가변수화

dumm_cols(변수) = ['열 이름1', '열 이름2', '열 이름3']
df = pd.get_dummies(df, columns=dumm_cols, drop_first=True , dtype=int)