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({'국어': [90, 82], '수학': [81, 76]}, index=['민철', '철수'])
>>> df_top
|
cs |
◆ 결과
국어 | 수학 | |
민철 | 90 | 81 |
철수 | 82 | 76 |
1
2
3
|
>>> df_middle = DataFrame({'국어': [70, 62], '영어': [77, 68]}, index=['영민', '정수'])
>>> df_middle
|
cs |
◆ 결과
국어 | 영어 | |
영민 | 70 | 77 |
정수 | 62 | 68 |
1
2
3
|
>>> df_bottom = DataFrame({'영어': [70, 88], '과학': [81, 76]}, index=['민철', '태영'])
>>> df_bottom
|
cs |
◆ 결과
영어 | 과학 | |
민철 | 70 | 81 |
태영 | 88 | 76 |
2) 행단위 병합
- 한번에 두 개의 데이터프레임만 병합
A) 인덱스가 지정되지 않은 샘플 데이터 프레임 만들기
1
2
3
|
>>> df_left = DataFrame({'고객번호': [1001, 1002, 1003, 1004], '이름': ['철수', '영희', '민철', '미영']})
>>> df_left
|
cs |
◆ 결과
고객번호 | 이름 | |
0 | 1001 | 철수 |
1 | 1002 | 영희 |
2 | 1003 | 민철 |
3 | 1004 | 미영 |
1
2
3
|
>>> df_right = DataFrame({'고객번호': [1001, 1002, 1003, 1005], '금액': [10000, 20000, 15000, 5000]})
>>> 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 |
'Python' 카테고리의 다른 글
Python (Selenium) (0) | 2020.05.22 |
---|---|
python(지도 시각화) (0) | 2020.05.21 |
Python (데이터 전처리 - 데이터검색, 행/열 추가) (0) | 2020.05.15 |
Python (데이터 전처리 - 행/열 순서 및 이름 변경, 데이터 정렬) (1) | 2020.05.14 |
Python(DataFrame) (0) | 2020.05.14 |
댓글