오식랜드
[python] pandas 데이터 수정 본문
반응형
출처 : 나도코딩 https://www.youtube.com/watch?v=PjhlUzp_cU0&t=10533
import pandas as pd
# excel 파일 열기
df = pd.read_excel('score.xlsx', index_col='지원번호')
print(df)
이름 학교 키 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
Column 수정
- 하나의 데이터 수정
위의 데이터에서 ‘학교’중 ‘북산고’가 학교 이름이 바뀌었다고 하자
print(df['학교'].replace({'북산고' : '상북고'}))
지원번호
1번 상북고
2번 상북고
3번 상북고
4번 상북고
5번 상북고
6번 능남고
7번 능남고
8번 능남고
Name: 학교, dtype: object
- 여러개 데이터 수정
이번에는 북산고와 능남고 둘 다 이름이 바뀌었다고 하자
그럴 땐 중괄호{} 안에서 컴마(,)로 나열해주면 된다
print(df['학교'].replace({'북산고' : '상북고', '능남고' : '바뀐고'}, inplace=True))
지원번호
1번 상북고
2번 상북고
3번 상북고
4번 상북고
5번 상북고
6번 바뀐고
7번 바뀐고
8번 바뀐고
Name: 학교, dtype: object
- 모든 데이터 바꾸기
SW특기를 모두 소문자로 바꿔보자
df['SW특기'] = df['SW특기'].str.lower()
print(df)
이름 학교 키 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고 197 90 85 100 95 85 python
2번 정대만 북산고 184 40 35 50 55 25 java
3번 송태섭 북산고 168 80 75 70 80 75 javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 c
7번 황태산 능남고 188 55 65 45 40 35 python
8번 윤대협 능남고 190 100 85 90 95 95 c#
- 모든 데이터에 글자 추가
학교 col의 ‘ㅁㅁ고’를 ‘ㅁㅁ고등학교’로 바꿔보자
df['학교'] = df['학교'] + '등학교'
print(df)
이름 학교 키 국어 영어 수학 과학 사회 SW특기
지원번호
1번 채치수 북산고등학교 197 90 85 100 95 85 python
2번 정대만 북산고등학교 184 40 35 50 55 25 java
3번 송태섭 북산고등학교 168 80 75 70 80 75 javascript
4번 서태웅 북산고등학교 187 40 60 70 75 80 NaN
5번 강백호 북산고등학교 188 15 20 10 35 10 NaN
6번 변덕규 능남고등학교 202 80 100 95 85 80 c
7번 황태산 능남고등학교 188 55 65 45 40 35 python
8번 윤대협 능남고등학교 190 100 85 90 95 95 c#
Column 추가
성적의 총 합을 나타내는 column을 추가해주자
df['총합'] = df['국어'] + df['영어'] + df['수학'] + df['사회'] + df['과학']
print(df)
이름 학교 키 국어 ... 과학 사회 SW특기 총합
지원번호 ...
1번 채치수 북산고등학교 197 90 ... 95 85 python 455
2번 정대만 북산고등학교 184 40 ... 55 25 java 205
3번 송태섭 북산고등학교 168 80 ... 80 75 javascript 380
4번 서태웅 북산고등학교 187 40 ... 75 80 NaN 325
5번 강백호 북산고등학교 188 15 ... 35 10 NaN 90
6번 변덕규 능남고등학교 202 80 ... 85 80 c 440
7번 황태산 능남고등학교 188 55 ... 40 35 python 240
8번 윤대협 능남고등학교 190 100 ... 95 95 c# 465
[8 rows x 10 columns]
이번에는 총합이 400점 이상인 학생은 합격, 400점 미만인 학생은 불합격으로 결과col을 추가해주자
우선 모두에게 동일하게 ‘불합격’을 넣으면서 ‘결과’ col으르 추가해준다
df['결과'] = '불합격'
그 이후에, loc을 이용해서 총합이 400이상인 row를 선택해주고,
그 row 중 ‘결과’ col의 값을 변경해준다
df.loc[df['총합'] >= 400, '결과'] = '합격'
추가한 결과
이름 학교 키 국어 ... 사회 SW특기 총합 결과
지원번호 ...
1번 채치수 북산고등학교 197 90 ... 85 python 455 합격
2번 정대만 북산고등학교 184 40 ... 25 java 205 불합격
3번 송태섭 북산고등학교 168 80 ... 75 javascript 380 불합격
4번 서태웅 북산고등학교 187 40 ... 80 NaN 325 불합격
5번 강백호 북산고등학교 188 15 ... 10 NaN 90 불합격
6번 변덕규 능남고등학교 202 80 ... 80 c 440 합격
7번 황태산 능남고등학교 188 55 ... 35 python 240 불합격
8번 윤대협 능남고등학교 190 100 ... 95 c# 465 합격
Column 삭제
- 하나의 col 삭제
이제 더이상 ‘총합’은 필요가 없어서 삭제를 할 때 이렇게 적으면 된다
df.drop(columns=['총합'])
- 2개 이상의 col 삭제
df.drop(columns=['과학', '사회'])
inplace가 필요하다!
Row 삭제
row를 삭제할 땐, drop함수에서 columns 대신 index로 사용하면 된다.
df.drop(index=['4번'])
조건에 따라 삭제
위의 데이터에서 수학 점수가 80점 미만인 학생의 데이터를 지우고싶다.
그럴 땐 우선 조건이 들어간 filter를 만들고, 그 조건에 해당하는 index를 출력해보자
filt = df['수학'] < 80
target = df[filt].index
print(target)
# Index(['2번', '3번', '4번', '5번', '7번'], dtype='object', name='지원번호')
그리고 그 list를 drop에 넣어주면 된다.
df.drop(index=target)
Row 추가
새로운 row를 추가할 때에는 loc로 추가가 가능하다
df.loc['9번'] = ['이정환', '해남고등학교', 184, 90, 90, 90, 90, 90, 'Kotlin', 450, '합격']
Cell 수정
- 하나의 데이터 수정
df.loc['4번', 'SW특기'] = 'Python'
- 2개 이상의 데이터 수정
df.loc['5번', ['학교','SW특기']] = ['능남고등학교', 'C']
Column 순서 변경
현재 col 확인하기
cols = list(df.columns)
print(cols)
# ['이름', '학교', '키', '국어', '영어', '수학', '과학', '사회', 'SW특기', '총합', '결과']
# cols[-1] : 맨 뒤의 col 선택
# cols[0: -1] : 맨 앞부터 마지막 하나 전까지 col 선택
# 합치기
df = df[[cols[-1] + cols[0: -1]]]
Column 이름 변경
df.colums에 list를 할당해주면 변경된다
df.columns = ['Name', 'School', 'Height', ...]
반응형
'dev-log > python' 카테고리의 다른 글
[python] pandas 그룹화 (0) | 2023.01.17 |
---|---|
[python] pandas 데이터에 함수 적용 (0) | 2023.01.17 |
[python] pandas 데이터 정렬 (0) | 2023.01.17 |
[python] pandas 결측치(비어있는 데이터) 처리 (0) | 2023.01.17 |
[python] pandas 데이터 선택 (0) | 2023.01.17 |
Comments