코드 프레소 [파이썬으로 배우는 Pandas] 강의 내용 정리
# DataFrame 데이터 추가 및 삭제..?
이전 포스팅에서 예시코드 중에 score_df['etc'] =0 을 통해 score_df에 존재하지 않는 column 인덱스인 'etc'에 0을 부여하였는데 그 결과 모든 요소가 0인 Series가 DataFrame에 추가된 것을 확인할 수 있었다. 이처럼, 데이터 추가의 방법은 아래와 같다.
[열 데이터 추가 방법]
. 연산자와 인덱싱을 통해 새로운 Series를 추가하는 방식으로 접근할 수 있다.
[행 데이터 추가 방법]
df.loc()프로퍼티를 활용해 행 데이터에 접근하여 추가할 수 있다.
데이터를 삭제하는 방법은 df.drop()함수를 활용하여 DataFrame의 데이터를 삭제할 수 있다.
데이터 추가 방법은 이전 포스팅에서 언급한 데이터 조회 방법과 굉장히 유사하므로 예시코드로 해당 내용을 이해해보고 데이터 삭제에 사용되는 df.drop()함수는 API Reference를 살펴보고 해당 함수를 이해해보겠다.
# DataFrame 데이터 추가 방법
# 열 데이터 추가 방법:: 인덱싱
import pandas as pd
# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'age': [20, 24, 23, 20, 27],
'score': [100, 95, 80, 85, 97],
'grade': ['A','A','B','B','A'],
'subject':['python', 'java','python', 'c','java']}
score_df = pd.DataFrame(data=score)
print(score_df)
semester_data = pd.Series(['20-01','20-02','21-01','21-02','20-02'])
score_df['semester'] = semester_data
print('\nAdd Columns : semester')
print(score_df)
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
Add Columns : semester
name age score grade subject semester
0 Jessi 20 100 A python 20-01
1 Emma 24 95 A java 20-02
2 Alex 23 80 B python 21-01
3 Jessi 20 85 B c 21-02
4 Tom 27 97 A java 20-02
# 열 데이터 추가 방법:: 인덱싱 + 조건 활용
import pandas as pd
# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'age': [20, 24, 23, 20, 27],
'score': [100, 95, 80, 85, 97],
'grade': ['A','A','B','B','A'],
'subject':['python', 'java','python', 'c','java']}
score_df = pd.DataFrame(data=score)
print(score_df)
semester_data = pd.Series(['20-01','20-02','21-01','21-02','20-02'])
score_df['semester'] = semester_data
print('\nAdd Columns : semester')
print(score_df)
high_score = score_df['score'] > 90
score_df['high_score'] = high_score
print("\nAdd high_score :: ")
print(score_df)
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
Add Columns : semester
name age score grade subject semester
0 Jessi 20 100 A python 20-01
1 Emma 24 95 A java 20-02
2 Alex 23 80 B python 21-01
3 Jessi 20 85 B c 21-02
4 Tom 27 97 A java 20-02
Add high_score ::
name age score grade subject semester high_score
0 Jessi 20 100 A python 20-01 True
1 Emma 24 95 A java 20-02 True
2 Alex 23 80 B python 21-01 False
3 Jessi 20 85 B c 21-02 False
4 Tom 27 97 A java 20-02 True
# 행 데이터 추가 방법:: df.loc()프로퍼티 활용
import pandas as pd
# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'age': [20, 24, 23, 20, 27],
'score': [100, 95, 80, 85, 97],
'grade': ['A','A','B','B','A'],
'subject':['python', 'java','python', 'c','java']}
score_df = pd.DataFrame(data=score)
print(score_df)
score_df.loc[6] = ['Jina','20',100,'A','python']
print('\nAdd Row 6')
print(score_df)
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
Add Row 6
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
6 Jina 20 100 A python
# DataFrame 데이터 삭제
# API Reference
API Reference :: pandas.DataFrame.drop()
# Parameter 정리
- labels : 단일 레이블 또는 list-like 객체로, 제거할 인덱스 또는 열 레이블을 의미한다. 만약 튜플을 사용할 경우, 이는 단일 레이블로 처리되며 list-like 객체로 간주되지 않는다.
- axis : {0 또는 'index', 1 또는 'columns'}로, 기본값은 0이다. 레이블을 인덱스(0 또는 'index')에서 제거할지, 열(1 또는 'columns')에서 제거할지를 결정한다.
- index : 단일 레이블 또는 list-like 객체로, axis를 지정하는 대안이다. (labels, axis=0은 index=labels와 동일하게 동작한다.)
- columns : 단일 레이블 또는 list-like 객체로, axis를 지정하는 또 다른 대안이다. (labels, axis=1은 columns=labels와 동일하게 동작한다.)
- level : int 또는 레벨 이름으로 선택 사항이며, MultiIndex에서 특정 레벨의 레이블을 제거할 때 사용된다.
- inplace : bool 타입으로, 기본값은 False이다. False일 경우, 복사본을 반환하며, True일 경우, 원본에서 직접 작업을 수행하고 None을 반환한다.
- errors : {'ignore', 'raise'} 중 하나를 선택하며, 기본값은 'raise'이다. 'ignore'를 선택하면, 존재하는 레이블만 제거하고 오류를 무시한다.
pandas.DataFrame.drop()의 반환값을 보면 DataFrame 또는 None인 것을 확인할 수 있다. 이를 통해 기본적으로 inplace parameter default는 False이므로 따로 inplace 값을 True로 지정해주지 않는 이상 pandas.DataFrame.drop()는 원본 데이터를 변경하지 않는다.
# 행 데이터 삭제 & inplace parameter 변경을 통해 원본 데이터 삭제 유무 확인
import pandas as pd
# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'age': [20, 24, 23, 20, 27],
'score': [100, 95, 80, 85, 97],
'grade': ['A','A','B','B','A'],
'subject':['python', 'java','python', 'c','java']}
score_df = pd.DataFrame(data=score)
score_df.loc[6] = ['Jina','20',100,'A','python']
print('\nAdd Row 6')
print(score_df)
new_df = score_df.drop(6)
print("\nCheck Original DataFrame change")
print(score_df)
score_df.drop(6,inplace =True)
print("\nCheck Original DataFrame change")
print(score_df)
Add Row 6
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
6 Jina 20 100 A python
# inplace=False일 때 drop(6)을 통해 인덱스 6 행을 삭제하더라도 원본 데이터는 유지
Check Original DataFrame change
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
6 Jina 20 100 A python
# inplace=True일 때 drop(6)을 통해 인덱스 6 행을 삭제하면 원본데이터에서 삭제됨을 확인 가능
Check Original DataFrame change
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
# 열 데이터 삭제
import pandas as pd
# 실습 데이터 생성
score = { 'name' : ['Jessi', 'Emma', 'Alex', 'Jessi', 'Tom'],
'age': [20, 24, 23, 20, 27],
'score': [100, 95, 80, 85, 97],
'grade': ['A','A','B','B','A'],
'subject':['python', 'java','python', 'c','java']}
score_df = pd.DataFrame(data=score)
score_df.loc[6] = ['Jina','20',100,'A','python']
print(score_df)
new_df = score_df.drop(columns=['grade'],inplace=True)
print("\nCheck Original DataFrame change")
print(score_df)
name age score grade subject
0 Jessi 20 100 A python
1 Emma 24 95 A java
2 Alex 23 80 B python
3 Jessi 20 85 B c
4 Tom 27 97 A java
6 Jina 20 100 A python
Check Original DataFrame change
name age score subject
0 Jessi 20 100 python
1 Emma 24 95 java
2 Alex 23 80 python
3 Jessi 20 85 c
4 Tom 27 97 java
6 Jina 20 100 python
결과를 살펴보면 grade 인덱스 명의 column이 삭제된 것을 볼 수 있다.
'공부한 것들.. > Pandas' 카테고리의 다른 글
Pandas 결측치 이해 및 결측치 처리 (2) | 2024.09.14 |
---|---|
Pandas 데이터 파일 읽기 (1) | 2024.09.14 |
Pandas 데이터 조회 및 변경 (0) | 2024.09.13 |
Pandas 수치형 데이터 & 범주형 데이터 활용 (0) | 2024.09.13 |
Pandas 자료구조:: Series & DataFrame (0) | 2024.09.13 |