티스토리 뷰

728x90
반응형

 

 

 

데이터타입을 변환 테스트를 진행할 데이터프레임을 만들어봅니다.

 

import pandas as pd

file = pd.DataFrame({'a': ['1','2','3', '4'],
                     'b': [1,2,3,4],
                     'c': [0.1, 0.2, 0.3, 0.4],
                     'd': ['True', 'False', 'True', 'False'],
                     'e': [True, False, True, False],
                     'f': ['hello', 'world', 'wide', 'handsome']
                    })

 

여러 형변환을 테스트해보기 위해 여러 자료형별로 컬럼을 만들었습니다.

file.dtypes으로 컬럼별 데이터타입을 출력해봅니다.

 

 

원하는 컬럼의 데이터타입을 변환하는 방법.

아주 간단합니다!

file = file.astype({ 컬럼명 : 자료형 })

 

1. string to int
file = file.astype({ '컬럼명' : 'int' })

 

 

2. string to float
file = file.astype({ '컬럼명' : 'float' })

 

 

3. string to string

 

데이터프레임을 만들어 file.dtypes으로 데이터타입을 확인했을 때,

string형은 object로 출력되었었는데, astype을 통해 'string'형으로 바꾸어주니

file.dtypes 결과 string으로 바뀌어 있네요!

file = file.astype({ '컬럼명' : 'string' })

 

4. string to bool

 

위 방법들과 똑같이 file.astype({ '컬럼명' : 'bool' })로 진행했을 때,

bool타입으로 변환되긴 하지만, 값이 무엇이든지 상관없이 전부다 True로 변경되어 있는 것을 확인할 수 있습니다.

다만, 값이 None(null)인 경우 False로 뜨게 됩니다.

bool로 변환하기 위해서는 아래와 같이 값을 지정해주어야 합니다.

file['컬럼명'] = file['컬럼명'].map({'True로 바꾸고싶은 값': True, 'False로 바꾸고싶은 값': False})

 

변경 후 file.dtypes으로 출력해보았을 때, 똑같이 object로 나타나기는 하지만

행 하나하나마다 값의 타입을 출력해보면 bool 타입으로 출력됩니다.

file['d'][0] == True 로 정상적으로 True값으로 출력되네요.

 

 

만약 해당컬럼에 True, False로 변환 지정한 값들이 없는데 변환을 시도하면

모두 null 데이터로 변경되게 됩니다!!

 

 

5. string to date

date타입으로 변경할 때에는 pd.to_datetime를 사용합니다.

file = pd.to_datetime(file['컬럼명'])

 

문자열이 데이터타입 포맷이 아니라면 에러가 뜨게 됩니다.

테스트를 위해 새 컬럼 g를 생성해봅니다.

여러 포맷의 date 데이터를 넣었습니다.

file['g'] = ['20210101', '2021-01-01', '2022-01-01 22:22:22', '2023-01-01 22:22']

 

새 컬럼 h에 date형으로 변환한 데이터를 넣어봅니다.

어떤 형태이든 년,월,일이 들어가기만 하면 자동적으로 변환되는 것을 확인할 수 있습니다.

file['h'] = pd.to_datetime(file['g'])

 

None값이 들어가 있어도 오류없이 잘 변환이 되는지 확인해보았을 때도

정상적으로 변환되는 것을 확인할 수 있어요.

 

 

string에서 타 데이터타입으로의 변환을 설명했는데요,

int형, float형... 으로부터 타 데이터타입으로의 변환도 동일한 방법으로 진행할 수 있습니다.!

데이터타입 변환 시에 데이터의 포맷이 변환하려는 타입형에 올바르다면 정상적으로 변환,

올바르지 않다면 아래와 같은 오류가 나타납니다.

 

아래 오류는 'True', 'False' 등의, number로 변환불가한 문자열이 들어있는 컬럼열을 int형으로 변경하려고 했을 때 발생한 오류입니다.

invalid literal for int() with base 10: 'True'

 

 

끝!

728x90
반응형
댓글