본 포스팅에서는 np.genfromtxt를 활용하여 csv 파일 내용을 로드하고자 한다.
np.genfromtxt
np.genfromtxt는 아래 설명과 같이 텍스트 파일에서 데이터를 로드하는 데 사용된다.
여러 가지 인자들이 입력 가능한데 이번 포스팅에서는 많이 사용될 몇 가지 예시만 들어볼 생각이다.
np.genfromtxt 활용
아래와 같이 int형태의 숫자들로 이뤄진 int.csv 파일을 활용해 보겠다.
np.genfromtxt는 반환되는 데이터의 형태는 "dtype"인자에 해당 데이터 형태를 입력시켜 준면 된다.
import numpy as np
np.genfromtxt('./dataset/int.csv') # default float
# array([111., 112., 113., 544., 545., 546., 317., 318., 320.])
np.genfromtxt('./dataset/int.csv',dtype=int)
# array([111, 112, 113, 544, 545, 546, 317, 318, 320])
np.genfromtxt('./dataset/int.csv',dtype=str)
# array(['111', '112', '113', '544', '545', '546', '317', '318', '320'], dtype='<U3')
dtype에 아무것도 입력시켜주지 않는다면 데이터는 부동소수점 형태로 출력된다.
dtype에 int를 입력시켜주면 기존 csv 파일 내용과 동일하게 정수 형태로 출력된다.
dtype에 str를 입력시켜주면 문자열 형태로 출력된다.
따라서 사용자의 입맛에 맞게 데이터 형식을 지정해 주면 된다.
반면에 아래의 str 형태의 데이터로 이뤄진 str.csv 파일을 다뤄보자.
np.genfromtxt('./dataset/str.csv')
# array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
np.genfromtxt('./dataset/str.csv',dtype=int)
# array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
np.genfromtxt('./dataset/str.csv',dtype=str)
#array(['id,affiliation', '111,A', '112,A', '113,A', '544,B', '545,B', '546,B', '317,C', '318,C', '320,C'], dtype='<U14')
dtype을 str로 입력하면 문제없이 반환이 되지만 int나 float과 같은 숫자 데이터형식은 nan 혹은 -1과 같이 원하는 바와 상이하게 데이터가 반환되므로 str의 데이터를 로드할 때는 dtype에 str는 필수적으로 넣어주어야 한다.
마지막으로 skip_header와 skip_footer에 대해 얘기해 보자.
skip_header와 skip_footer는 이름에서 알 수 있듯 특정 윗부분 혹은 특정 아랫부분을 제외하고 데이터를 로드할 때 사용이 된다.
예시는 str.csv로 동일하다.
np.genfromtxt('./dataset/str.csv', dtype=str, skip_header=1)
# array(['111,A', '112,A', '113,A', '544,B', '545,B', '546,B', '317,C', '318,C', '320,C'], dtype='<U5')
np.genfromtxt('./dataset/str.csv', dtype=str, skip_header=1, skip_footer=1)
# array(['111,A', '112,A', '113,A', '544,B', '545,B', '546,B', '317,C', '318,C'], dtype='<U5')
skip_header=1을 줄 경우에 맨 윗줄이 사라진 것을 알 수 있으며 추가적으로 skip_footer=1을 인자로 추가한 경우에는 맨 아래 줄의 데이터까지 사라진 것을 알 수 있다.
스킵을 원하는 만큼 사용자가 숫자를 넣어주면 된다.
주의사항
np.genfromtxt는 맨 위에서 언급했듯이 텍스트 형태만 인자로 입력이 되기 때문에 엑셀 파일인 xlsx 확장자는 입력이 될 수 없고 텍스트 형태인 csv 확장자만 인풋이 가능하다.
위 오류는 np.genfromtxt에 csv 파일이 아닌 xlsx 파일을 입력했을 때 발생하는 오류이다.
csv 파일과 xlsx 파일의 차이점은 아래의 링크를 참고하면 된다.
'Python > Numpy' 카테고리의 다른 글
[Python] 리스트 (List) vs 넘파이 (Numpy) 어레이 차이 (0) | 2023.02.12 |
---|---|
[Python] np.nan으로 nan 생성하기 (0) | 2023.02.01 |
[Python] np.ones np.zeros - 1 혹은 0으로 이뤄진 배열 생성 (0) | 2022.10.04 |
[Python] np.where() - 조건 두 개 사용하는 법 (0) | 2022.09.26 |
[Python] np.unique() - 중복된 값들 중 고유한 값들만 반환하기 (0) | 2022.09.21 |
댓글