개요
파이썬에서 문자열 리터럴은 작은따옴표(') 또는 큰따옴표(")로 둘러싸여 표현됩니다. 변수에 문자열을 할당하려면 변수 이름 뒤에 등호(=)를 쓰고 문자열을 지정하면 되며, 세 개의 따옴표(''' 또는 """)를 사용하면 여러 줄로 이루어진 문자열도 하나의 변수에 담을 수 있습니다.
데이터 분석이나 수치 연산을 하다 보면 문자열 형태로 저장된 숫자 값들을 실제 부동 소수점(float) 숫자로 변환해야 하는 경우가 자주 발생합니다. 이 글에서는 NumPy 라이브러리를 활용해 문자열 배열을 부동 소수점 배열로 변환하는 대표적인 세 가지 방법을 예제와 함께 살펴보겠습니다.
방법 1: astype() 사용
astype() 메서드는 기존 배열의 데이터 타입을 새로운 타입으로 변환하는 가장 직관적이고 널리 쓰이는 방법입니다.
import numpy as np
# 초기 문자열 배열 생성
ini_array = np.array(["1.1", "1.5", "2.7", "8.9"])
print("initial array", str(ini_array))
# astype()을 사용해 float 배열로 변환
res = ini_array.astype(np.float64)
print("final array", str(res))방법 2: fromstring() 사용
np.fromstring()은 구분자로 나뉜 문자열을 파싱해 배열을 생성하는 함수입니다. 먼저 join()으로 문자열 배열을 하나의 문자열로 합친 뒤 변환할 수 있습니다.
import numpy as np
ini_array = np.array(["1.1", "1.5", "2.7", "8.9"])
print("initial array", str(ini_array))
# 문자열 배열을 쉼표로 연결한 후 float 배열로 변환
ini_array = ', '.join(ini_array)
res = np.fromstring(ini_array, dtype=np.float64, sep=', ')
print("final array", str(res))참고: np.fromstring()은 텍스트 파싱 용도로는 더 이상 권장되지 않습니다(deprecated). 최신 버전의 NumPy에서는 np.fromiter() 또는 리스트 컴프리헨션과 함께 np.array()를 사용하는 것이 좋습니다.
방법 3: asarray() 사용
np.asarray()는 입력 데이터를 지정된 dtype의 ndarray로 변환하는 함수입니다. 이미 배열인 입력이 주어지면 불필요한 복사 없이 원본을 활용할 수 있고, 메모리 배치 방식(order)까지 지정할 수 있다는 점이 특징입니다.
import numpy as np
ini_array = np.array(["1.1", "1.5", "2.7", "8.9"])
print("initial array", str(ini_array))
# asarray()를 사용해 float64 타입 배열로 변환
final_array = np.asarray(ini_array, dtype=np.float64, order='C')
print("final array", str(final_array))실행 결과
세 가지 방법 모두 아래와 같이 동일한 결과를 출력합니다.
initial array ['1.1' '1.5' '2.7' '8.9'] final array [1.1 1.5 2.7 8.9]
마무리 및 정리
- astype(): 가장 간단하고 일반적으로 권장되는 방식입니다.
- fromstring(): 구분자가 포함된 단일 문자열을 다룰 때 유용하지만 현재는 deprecated 상태입니다.
- asarray(): dtype과 메모리 배치(order)를 세밀하게 제어하고 싶을 때 적합합니다.
일반적인 경우에는 astype(np.float64)를 사용하는 것이 가장 안전하고 효율적입니다. 한 가지 주의할 점은, 오래된 코드에서 자주 보이는 np.float는 NumPy 1.24부터 완전히 제거되었으므로, 내장 타입인 float나 np.float64를 사용해야 한다는 것입니다.