티스토리 뷰
데이터타입을 변환 테스트를 진행할 데이터프레임을 만들어봅니다.
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'
끝!
'프로그래밍 > Python' 카테고리의 다른 글
[pandas] DataFrame 특정 열 소수점자리 설정하기 (0) | 2022.07.08 |
---|---|
[pandas] 데이터프레임 특정 열에 절대값 부여하기 pd.DataFrame Absolute value for specific column (abs) (0) | 2022.07.07 |
[pandas] 데이터 결측치 존재여부 확인 및 결측치 처리하기 (0) | 2022.07.02 |
[pandas] 2개 이상의 DataFrame join하기 (0) | 2022.07.01 |
[geopandas] gpd.sjoin를 사용하여 polygon 안에 point, polygon 포함되는지 확인하기 (0) | 2022.06.30 |