본문 바로가기
Python

Python (데이터 전처리 - 행/열 삭제 및 병합)

by 글로리. 2020. 5. 15.

7. 행, 열 삭제 : drop( )

 - 원본에 바로 적용하고 싶다면 inplace = True 입력

 1) 행 삭제

  A) 데이터 복사

1
2
3
>>> 복사본3 = 성적표.copy()
 
>>> 복사본3
cs

 

  ◆ 결과

  학년 성별 국어 영어 수학 과학
호영 4 남자 120 50.0 NaN 88.0
철수 1 남자 98 NaN 88.0 64.0
영희 2 여자 88 90.0 62.0 72.0
수현 3 여자 63 60.0 31.0 70.0
민수 1 남자 92 70.0 NaN NaN

 

  B) 특정 행 삭제하기

 

1
2
3
>>> d1 = 복사본3.drop('철수')
 
>>> d1
cs

 

 

  ◆ 결과

  학년 성별 국어 영어 수학 과학
호영 4 남자 120 50.0 NaN 88.0
영희 2 여자 88 90.0 62.0 72.0
수현 3 여자 63 60.0 31.0 70.0
민수 1 남자 92 70.0 NaN NaN

 

  C) 여러 행 삭제하기

  - 리스트 형태로 행의 이름을 파라미터로 전달

  - 존재하지 않는 행을 삭제하고자 할 경우 에러 발생

 

1
2
3
>>> d2 = 복사본3.drop(['호영','영희'])
 
>>> d2
cs

 

  ◆ 결과

  학년 성별 국어 영어 수학 과학
철수 1 남자 98 NaN 88.0 64.0
수현 3 여자 63 60.0 31.0 70.0
민수 1 남자 92 70.0 NaN NaN

 

 

 2) 열 삭제

  - axis = 1 파라미터 입력

  axis = 0 : x축, 행에 대한 적용, 기본값.
  axis = 1 : y축, 열에 대한 적용

 

 A) 데이터 프레임 복사

1
2
3
>>> 복사본4 = 성적표.copy()
 
>>> 복사본4
cs

 

  ◆ 결과

  학년 성별 국어 영어 수학 과학
호영 4 남자 120 50.0 NaN 88.0
철수 1 남자 98 NaN 88.0 64.0
영희 2 여자 88 90.0 62.0 72.0
수현 3 여자 63 60.0 31.0 70.0
민수 1 남자 92 70.0 NaN NaN

 

 B) 컬럼 이름을 통한 열 삭제

1
2
3
>>> k1 = 복사본4.drop('국어', axis=1)
 
>>> k1
cs

 

  ◆ 결과

  학년 성별 영어 수학 과학
호영 4 남자 50.0 NaN 88.0
철수 1 남자 NaN 88.0 64.0
영희 2 여자 90.0 62.0 72.0
수현 3 여자 60.0 31.0 70.0
민수 1 남자 70.0 NaN NaN

 

 

 C) 여러 열을 동시에 삭제

  - 열 이름을 리스트로 지정

1
2
3
>>> k2 = 복사본4.drop(['영어''수학''과학'], axis=1)
 
>>> k2
cs

 

  ◆ 결과

  학년 성별 국어
호영 4 남자 120
철수 1 남자 98
영희 2 여자 88
수현 3 여자 63
민수 1 남자 92

 

 


 

 

8. 두 개 이상의 데이터 프레임 병합

 1) 행단위 병합

  A) 샘플 데이터프레임 만들기

   - df_top과 df_middle은 '국어' 컬럼이 동일

   - df_top과 df_bottom은 '민철' 인덱스가 동일

 

1
2
3
>>> df_top = DataFrame({'국어': [9082], '수학': [8176]}, index=['민철''철수'])
 
>>> df_top
cs

 

  ◆ 결과

  국어 수학
민철 90 81
철수 82 76

 

1
2
3
>>> df_middle = DataFrame({'국어': [7062], '영어': [7768]}, index=['영민''정수'])
 
>>> df_middle
cs

 

  ◆ 결과

  국어 영어
영민 70 77
정수 62 68

 

1
2
3
>>> df_bottom = DataFrame({'영어': [7088], '과학': [8176]}, index=['민철''태영'])
 
>>> df_bottom
cs

 

  ◆ 결과

  영어 과학
민철 70 81
태영 88 76

 

 

 2) 행단위 병합

  - 한번에 두 개의 데이터프레임만 병합

 

  A) 인덱스가 지정되지 않은 샘플 데이터 프레임 만들기

1
2
3
>>> df_left = DataFrame({'고객번호': [1001100210031004], '이름': ['철수''영희''민철''미영']})
 
>>> df_left
cs

 

  ◆ 결과

  고객번호 이름
0 1001 철수
1 1002 영희
2 1003 민철
3 1004 미영

 

 

1
2
3
>>> df_right = DataFrame({'고객번호': [1001100210031005], '금액': [1000020000150005000]})
 
>>> df_right
cs

 

  ◆ 결과

  고객번호 금액
0 1001 10000
1 1002 20000
2 1003 15000
3 1005 5000

 

  B) 두 데이터프레임의 공통 컬럼을 기준으로 병합

   - 양쪽 데이터프레임에 모두 존재하는 데이터만 보여준다

1
2
3
4
# 병합시 제외되는 항목들
# - df_left의 고객번호 1004번 데이터는 df_right의 고객번호 컬럼과 겹치지 않는다.
# - df_right의 고객번호 1005번 데이터는 df_left의 고객번호 컬럼과 겹치지 않는다.
>>> merge(df_left, df_right)
cs

 

  ◆ 결과

  고객번호 이름 금액
0 1001 철수 10000
1 1002 영희 20000
2 1003 민철 15000

 

 

  C) 왼쪽 데이터프레임을 기준으로 오른쪽 데이터프레임을 병합

    - how = 'left' 파라미터는 왼쪽 데이터프레임의 모든 데이터를 보여준다

1
2
# df_right의 고객번호 1005은 df_left에 존재하지 않기 때문에 병합되지 않는다.
>>> merge(df_left, df_right, how='left')
cs

 

  ◆ 결과

  고객번호 이름 금액
0 1001 철수 10000.0
1 1002 영희 20000.0
2 1003 민철 15000.0
3 1004 미영 NaN

 

  D) 오른쪽 데이터프레임을 기준으로 왼쪽 프레임을 병함

  - how='right' 파라미터는 오른쪽 데이터프레임의 모든 데이터를 보여준다.

 

1
2
# df_left의 고객번호 1004는 df_right에 존재하지 않기 때문에 병합되지 않는다.
>>> merge(df_left, df_right, how='right')
cs

 

  ◆ 결과

  고객번호 이름 금액
0 1001 철수 10000
1 1002 영희 20000
2 1003 민철 15000
3 1005 NaN 5000

 

  E) 양쪽 DataFrame을 모두 병합

1
merge(df_lefr, df_right, how = 'outer')
cs

 

  ◆ 결과

  고객번호 이름 금액
0 1001 철수 10000.0
1 1002 영희 20000.0
2 1003 민철 15000.0
3 1004 미영 NaN
4 1005 NaN 5000.0

댓글