11-01. dtype변경 (astype)
DataFrame.astype(dtype, copy=True, errors='raise')
개요
astype 메서드는 열의 요소의 dtype을 변경하는함수 입니다.
사용법
기본 사용법
df.astype(dtype, copy=True, errors='raies')
dtype : 변경할 type입니다.
copy : 사본을 생성할지 여부입니다.
errors : {'raies', 'ignore'} : 변경불가시 오류를 발생시킬 여부입니다.
copy는 사본을 생성할지 여부 입니다. False로 할 경우 원본 데이터의 값이 변경 될 경우
원본 데이터를 사용해 생성된 객체의 데이터도 변경되기 때문에 False의 선택은 신중해야합니다.
errors는 변경 불가능한 dtype일 경우 오류를 발생시킬지 여부입니다. False로 하여 오류를
발생시키지 않으면, 변경불가능한 요소는 원래 dtype 그대로 보존됩니다.
예시
먼저, 아래와 같이 기본적인 4x4 행렬을 만듭니다. col1은 int64, col2는 object, col3은 float64, col4는 bool의 dtype을 가집니다.
col1 = [1, 2, 3, 4]
col2 = ['one', 'two', 'three', 'four']
col3 = [1.5, 2.5, 3.5, 4.5]
col4 = [True, False, False, True]
index = ['row1','row2','row3','row4']
df = pd.DataFrame(index=index, data={"col1": col1, "col2": col2, "col3": col3, "col4": col4})
print(df)
>>
col1 col2 col3 col4
row1 1 one 1.5 True
row2 2 two 2.5 False
row3 3 three 3.5 False
row4 4 four 4.5 True
print(df.dtypes)
>>
col1 int64
col2 object
col3 float64
col4 bool
dtype: object
한개의 열만 type 변경
열의 dtype 변경 시 딕셔너리 형태로 {'열이름' : '변경 dtype'}와 같이 입력해줍니다.
df1 = df.astype({'col1':'int32'})
print(df1.dtypes)
>>
col1 int32
col2 object
col3 float64
col4 bool
dtype: object
int64 였던 col1의 dtype이 int32로 변경된 것을 확인할 수 있습니다.
다수의 열의 dtype 변경
다수의 열의 변경도 딕셔너리 형식을 이용하면 됩니다.
df1 = df.astype({'col1':'int32', 'col3':'int64'})
print(df1.dtypes)
>>
col1 int32
col2 object
col3 int64
col4 bool
dtype: object
int64 였던 col1의 dtype이 int32로 변경되고 float64였던 col3의 dtype의 값이 int64로 변경된 것을 확인할 수 있습니다.
모든 열의 dtype 변경
모든열의 변경을 하고자하는 경우 dtype 인수에 원하는 dtype을 입력해주는 것만으로도 가능합니다.
df1= df.astype(dtype='int64')
print(df1.dtypes)
>>
ValueError: invalid literal for int() with base 10: 'one'
col2 : object형식은 int64형태로 변경할 수가 없기 때문에 오류가 발생합니다. 변경 가능한 열만 변경하려면, 아래와 같이 errors 인수를 기본값인 'raise' 에서 'ignore'로 변경하면 됩니다.
df1= df.astype(dtype='int64',errors='ignore')
print(df1.dtypes)
>>
col1 int64
col2 object
col3 int64
col4 int64
dtype: object
'파이썬완전정복-Pandas DataFrame > 11. 데이터 타입' 카테고리의 다른 글
Pandas DataFrame 11-03. object 열의 적절 dtype추론(infer_objects) (0) | 2022.01.25 |
---|---|
Pandas DataFrame 11-02 열의 dtype통일 (convert_dtypes) (0) | 2022.01.25 |