728x90
단위 변환
서로 다른 단위가 섞여 있거나 같은 대상을 다른 형식으로 표현하면 분석의 정확도는 현저히 낮아진다.
데이터 포맷을 일관성있게 표준화 하는 작업이 필요하다.
마일 야드 온스 -> 미터 평 그램
import pandas as pd
df = pd.read_csv('data/auto-mpg.csv', header=None)
df.columns=['mpg','cylinders','displacement','horsepower','weight','acceleration','model year','origin','name']
마일 -> 킬로미터
mpg_to_kpl = 1.60934/3.78541
df['kpl'] = (df['mpg'] * mpg_to_kpl).round(2)
df['kpl'].head()
<결과>
0 7.65
1 6.38
2 7.65
3 6.80
4 7.23
Name: kpl, dtype: float64
자료형 변환
숫자가 문자열(object)로 저장된 경우에 숫자형(int or float)으로 변환해야 한다.
각 열의 자료형
.dtypes
df.dtypes
<결과>
mpg float64
cylinders int64
displacement float64
horsepower object
weight float64
acceleration float64
model year int64
origin int64
name object
kpl float64
dtype: object
열의 고유값 확인
.unique() / .nunique() : 고유값 갯수
df['horsepower'].unique()
<결과>
array([130., 165., 150., 140., 198., 220., 215., 225., 190., 170., 160.,
95., 97., 85., 88., 46., 87., 90., 113., 200., 210., 193.,
100., 105., 175., 153., 180., 110., 72., 86., 70., 76., 65.,
69., 60., 80., 54., 208., 155., 112., 92., 145., 137., 158.,
167., 94., 107., 230., 49., 75., 91., 122., 67., 83., 78.,
52., 61., 93., 148., 129., 96., 71., 98., 115., 53., 81.,
79., 120., 152., 102., 108., 68., 58., 149., 89., 63., 48.,
66., 139., 103., 125., 133., 138., 135., 142., 77., 62., 132.,
84., 64., 74., 116., 82.])
중복을 제외한 unique 값의 갯수 (유니크한 값의 갯수)
갯수가 작은것은 카테고리컬한 데이터일 수 있다.
df.nunique()
df.unique()
<결과>
mpg 129
cylinders 5
displacement 82
horsepower 94
weight 351
acceleration 95
model year 13
origin 3
name 305
dtype: int6
자료형 변환
df['horsepower'] = df['horsepower'].astype('float')
df['horsepower'].dtypes
dtype('float64')
.replace()
replace() 메소드를 사용하여 숫자 데이터를 문자열로 바꾸면 자동으로 object 자료형으로 변경된다.
df['origin'].replace({1:'USA', 2:'EU', 3:'JPN'},inplace=True)
print(df['origin'].unique())
print(df['origin'].dtypes)
<결과>
['USA' 'JPN' 'EU']
object
'model year' 열에는 연도를 나타내는 값들이 숫자: int 형태로 기록되어있다.
연도를 뜻하기 때문에, 연도는 시간적인 순서의 의미가 있으나 숫자의 상대적인 크기는 별 의미가 없다.
데이터는 숫자 형태를 갖더라도 자료형은 범주형(category)으로 표현하는 것이 적절하다.
df['model year'].sample(3)
<결과>
146 74
139 74
29 71
Name: model year, dtype: int64
자료형 변환
Cast a pandas object to a specified dtype.
타입을 바꾼다.
df.astype({'mpg':'float32'})
df['model year'] = df['model year'].astype('category')
df['model year'].sample(3)
<결과>
90 73
267 78
3 70
Name: model year, dtype: category
Categories (13, int64): [70, 71, 72, 73, ..., 79, 80, 81, 82]
시리즈 방법
df['mpg'] = df['mpg'].astype('float')
Return a subset of the DataFrame’s columns based on the column dtypes.
df.select_dtypes(exclude=['타입']) : 타입 제외
df.select_dtypes(exclude=['object']).head()
<결과>
mpg cylinders displacement weight acceleration model year origin
0 18.0 8.0 307.0 3504.0 12.0 70.0 1.0
1 15.0 8.0 350.0 3693.0 11.5 70.0 1.0
2 18.0 8.0 318.0 3436.0 11.0 70.0 1.0
3 16.0 8.0 304.0 3433.0 12.0 70.0 1.0
4 17.0 8.0 302.0 3449.0 10.5 70.0 1.0
df.select_dtypes(include=['타입']) : 타입 포함
df.select_dtypes(include=['object']).head()
horsepower name
0 130.0 chevrolet chevelle malibu
1 165.0 buick skylark 320
2 150.0 plymouth satellite
3 150.0 amc rebel sst
4 140.0 ford torino
댓글