달나라 노트

Python Pandas : pandas.to_numeric (data type을 숫자로 바꾸기) 본문

Python/Python Pandas

Python Pandas : pandas.to_numeric (data type을 숫자로 바꾸기)

CosmosProject 2020. 11. 25. 17:21
728x90
반응형

 

 

pandas.to_numeric

to_numeric은 데이터를 숫자 형식으로 바꿔주는 역할을 합니다.




to_numeric의 대표적 인자는 아래와 같습니다.

pd.to_numeric(숫자로 변경할 대상, errors='ignore/raise/coerce')
  

숫자로 변경할 대상: to_numeric을 적용시켜 숫자형식으로 변경시킬 대상이며 스칼라값, list, tuple, Series 등이 대상으로 지정될 수 있습니다.

 

errors: error는 총 3개의 옵션이 존재합니다.

- errors = 'ignore' -> 만약 숫자로 변경할 수 없는 데이터라면 숫자로 변경하지 않고 원본 데이터를 그대로 반환합니다.

- errors = 'coerce' -> 만약 숫자로 변경할 수 없는 데이터라면 기존 데이터를 지우고 NaN으로 설정하여 반환합니다.

- errors = 'raise' -> 만약 숫자로 변경할 수 없는 데이터라면 에러를 일으키며 코드를 중단합니다.




먼저 테스트용 Series를 생성합시다.

import pandas as pd

list_1 = ['1', '2', 3]

seri_1 = pd.Series(list_1)

print(seri_1)
print(type(seri_1))

- Output
0    1
1    2
2    3
dtype: object
<class 'pandas.core.series.Series'>
  






아래 예시를 보면 1, 2는 문자였고 3은 숫자인 Series에 to_numeric을 적용하여 모두 숫자형식으로 바꿨습니다.

 

그래서 dtype이 object에서 int64로 변환되었음을 알 수 있죠.

import pandas as pd

seri_1 = pd.to_numeric(seri_1)

print(seri_1)
print(type(seri_1))

- Output
0    1
1    2
2    3
dtype: int64
<class 'pandas.core.series.Series'>
  




아래 예시를 보면 1, 2는 문자였고 3은 숫자인 Series에 to_numeric을 적용하여 모두 숫자형식으로 바꿨습니다.

 

그래서 dtype이 object에서 int64로 변환되었음을 알 수 있죠.

import pandas as pd

seri_1 = pd.to_numeric(seri_1)

print(seri_1)
print(type(seri_1))

- Output
0    1
1    2
2    3
dtype: int64
<class 'pandas.core.series.Series'>
  




seri_2라는 Series에는 숫자로 변환할 수 없는 test라는 문자가 포함되어있습니다.

 

이때 to_numeric의 error 인자를 ignore로 설정했으니 이런 숫자로 변경할 수 없는 문자가 나와도 무시하고 지나가게됩니다.

import pandas as pd

list_2 = ['1', 'test', 3]

seri_2 = pd.Series(list_2)
print(seri_2)
print(type(seri_2))

seri_2 = pd.to_numeric(seri_2, errors='ignore')
print(seri_2)
print(type(seri_2))

- Output
0       1
1    test
2       3
dtype: object
<class 'pandas.core.series.Series'>

0       1
1    test
2       3
dtype: object
<class 'pandas.core.series.Series'>
  




to_numeric의 error 인자를 coerce로 설정했으니 숫자로 변경할 수 없는 문자를 nan으로 변경하여 반환합니다.

import pandas as pd

list_2 = ['1', 'test', 3]

seri_2 = pd.Series(list_2)
print(seri_2)
print(type(seri_2))

seri_2 = pd.to_numeric(seri_2, errors='coerce')
print(seri_2)
print(type(seri_2))

- Output
0       1
1    test
2       3
dtype: object
<class 'pandas.core.series.Series'>

0    1.0
1    NaN
2    3.0
dtype: float64
<class 'pandas.core.series.Series'>
  




to_numeric의 error 인자를 raise로 설정했으니 숫자로 변경할 수 없는 문자가 있을 경우 에러를 반환하고 코드를 중단합니다.

import pandas as pd

list_2 = ['1', 'test', 3]

seri_2 = pd.Series(list_2)
print(seri_2)
print(type(seri_2))

seri_2 = pd.to_numeric(seri_2, errors='raise')
print(seri_2)
print(type(seri_2))

- Output
0       1
1    test
2       3
dtype: object
<class 'pandas.core.series.Series'>

ValueError: Unable to parse string "test" at position 1
<class 'pandas.core.series.Series'>




to_numeric은 Series 뿐만 아니라 일반 스칼라 데이터에도 적용될 수 있습니다.

import pandas as pd

x = '1'
print(x)
print(type(x))


x = pd.to_numeric(x)
print(x)
print(type(x))


- Output
1
<class 'str'>

1
<class 'numpy.int64'>
  



 

 

 

 

 

728x90
반응형
Comments