본문 바로가기
Language/파이썬

파이썬 '판다스 데이터 분석' - 단위 변환, 자료형 변환 .astype('float'), unique(), nunique(), replace({ type: dict},inplace=True)

by javapp 자바앱 2021. 7. 19.
728x90

단위 변환

서로 다른 단위가 섞여 있거나 같은 대상을 다른 형식으로 표현하면 분석의 정확도는 현저히 낮아진다.
데이터 포맷을 일관성있게 표준화 하는 작업이 필요하다.
마일 야드 온스 -> 미터 평 그램

auto-mpg.csv
0.02MB
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

 

 

댓글