강의 홍보
데이터 개요
German Credit Card를 활용하여 데이터를 가공하도록 한다.
import pandas as pd
print(pd.__version__)
1.0.5
url = 'https://raw.githubusercontent.com/chloevan/kaggle2portpolio/master/datasets/german_credit_data.csv'
german_credit = pd.read_csv(url)
german_credit.head(3)
| Unnamed: 0 | Age | Sex | Job | Housing | Saving accounts | Checking account | Credit amount | Duration | Purpose |
|---|
| 0 | 0 | 67 | male | 2 | own | NaN | little | 1169 | 6 | radio/TV |
|---|
| 1 | 1 | 22 | female | 2 | own | little | moderate | 5951 | 48 | radio/TV |
|---|
| 2 | 2 | 49 | male | 1 | own | little | NaN | 2096 | 12 | education |
|---|
Pandas DataFrame은 Index와 나머지 열로 구성이 되어 있다.- 데이터의 행과 크기를 알아보는 가장 좋은 방법은
DataFrame객체의 shape변수를 이용하는 것이다.
print('DataFrame 크기: ', german_credit.shape)
DataFrame 크기: (1000, 10)
- 생성된
DataFrame 객체인 german_credit은 10개의 칼럼으로 이루어져 있다. - 이번에는
describe() 함수를 활용하여 개략적인 분포도를 확인한다.
| Unnamed: 0 | Age | Job | Credit amount | Duration |
|---|
| count | 1000.000000 | 1000.000000 | 1000.000000 | 1000.000000 | 1000.000000 |
|---|
| mean | 499.500000 | 35.546000 | 1.904000 | 3271.258000 | 20.903000 |
|---|
| std | 288.819436 | 11.375469 | 0.653614 | 2822.736876 | 12.058814 |
|---|
| min | 0.000000 | 19.000000 | 0.000000 | 250.000000 | 4.000000 |
|---|
| 25% | 249.750000 | 27.000000 | 2.000000 | 1365.500000 | 12.000000 |
|---|
| 50% | 499.500000 | 33.000000 | 2.000000 | 2319.500000 | 18.000000 |
|---|
| 75% | 749.250000 | 42.000000 | 2.000000 | 3972.250000 | 24.000000 |
|---|
| max | 999.000000 | 75.000000 | 3.000000 | 18424.000000 | 72.000000 |
|---|
german_credit['Sex'].value_counts()
male 690
female 310
Name: Sex, dtype: int64
Sex의 반환 결과는 1이 700개, 0이 300개로 확인할 수 있다.- 이 때
value_counts()는 많은 건수 순서로 정렬되어 값을 반환한다.
새로운 변수 추가
- 기존 데이터에서 변수를 추가하고 삭제하는 것을 진행해본다.
- 이러한 과정을 보통
도출변수로 표현되기도 한다.
german_credit['Age+100'] = german_credit['Age'] + 100
german_credit.shape
(1000, 11)
(1) 수치형 조건에 따른 변수 추가
- 수치형 변수의 특성에 따라 새로운 변수를 추가한다.
Age를 기준으로 크게 ">50"과 <=50이하로 구분한다.- 그러기 위해서는 각 조건이 맞는지를 확인하는
if 조건과 반복 수행을 위한 for-loop 조건이 필요하다.
# 빈 리스트 객체 생성
age_group = []
for age in german_credit['Age']:
if age > 50:
age_group.append('>50')
else:
age_group.append('<=50')
(age_group[0:3])
['>50', '<=50', '<=50']
- 출력된 결과물은 위와 같은 형태로 저장된 것을 확인할 수 있다.
age_group에 저장된 리스트 값을 새로운 변수로 추가한다.
german_credit['Age_group'] = age_group
german_credit['Age_group'].value_counts()
<=50 887
>50 113
Name: Age_group, dtype: int64
(2) 문자형 조건에 따른 변수 추가
- 이번에는 특정문자열의 존재 유무에 따라 새로운
column is_own을 추가한다.
german_credit['Housing'].value_counts()
own 713
rent 179
free 108
Name: Housing, dtype: int64
- 위 데이터에서
own인 경우는 True 그렇지 않은 경우는 False로 저장한다. np.where을 사용하면 if처럼 매우 쉽게 사용이 가능하다.
import numpy as np
german_credit['is_own'] = np.where(german_credit['Housing'] == "own", True, False)
german_credit['is_own'].value_counts()
True 713
False 287
Name: is_own, dtype: int64
변수 삭제
- 이렇게 생성된 변수를 삭제하도록 한다.
- 이 때, 가장 많이 사용되는 함수는
drop() 메서드를 이용한다. - 함수 사용 시, 주의해야 하는 것 중 하나는
axis 0은 행의 방향, axis 1은 열의 방향 축으로 움직인다.- 즉,
drop()함수를 사용 시에는 axis 1를 같이 입력한다.
german_credit = german_credit.drop('Age+100', axis = 1)
german_credit.shape
(1000, 12)
- 이번에는 두개의 변수를 추가한 뒤, 한꺼번에 삭제하는 예제를 실습해본다.
german_credit['age+10'] = german_credit['Age'] + 10
german_credit['age+20'] = german_credit['Age'] + 20
german_credit.shape
(1000, 14)
german_credit = german_credit.drop(['age+10', 'age+20'], axis = 1)
german_credit.shape
(1000, 12)
- 이렇게 두개 이상의 변수를 삭제할 때는
list를 활용해서 삭제가 가능하다.
정리
DataFrame에서 간단하게 변수를 추가 및 삭제하는 방법에 대해 배웠다.- 수치형 변수를 활용한 변수 추가, 문자형 변수를 활용한 변수 추가의 기본적인 내용을 숙지한다.
- 변수를 삭제할 때는
drop()메서드를 사용하는 데, 행을 삭제할 때는 axis = 0, 열을 삭제할 때는 axis = 1 활용한다.