본문 바로가기
  • Hello_
Python/Numpy

[Python] numpy로 csv 파일 내용 가져오기

by LDwDL 2023. 2. 6.
728x90
반응형

본 포스팅에서는 np.genfromtxt를 활용하여 csv 파일 내용을 로드하고자 한다.

 

np.genfromtxt 

np.genfromtxt는 아래 설명과 같이 텍스트 파일에서 데이터를 로드하는 데 사용된다.

 

https://numpy.org/doc/stable/reference/generated/numpy.genfromtxt.html

 

여러 가지 인자들이 입력 가능한데 이번 포스팅에서는 많이 사용될 몇 가지 예시만 들어볼 생각이다.

 

np.genfromtxt 활용

아래와 같이 int형태의 숫자들로 이뤄진 int.csv 파일을 활용해 보겠다.

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 파일을 다뤄보자.

 

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 확장자만 인풋이 가능하다.

 

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 14: invalid start byte

 

위 오류는 np.genfromtxt에 csv 파일이 아닌 xlsx 파일을 입력했을 때 발생하는 오류이다.

 

csv 파일과 xlsx 파일의 차이점은 아래의 링크를 참고하면 된다.

 

[Python] pandas로 xlsx 파일과 csv 파일 읽기

본 포스팅에서는 excel 파일의 확장자인 xlsx와 csv를 비교해 보고 padas로 각각 읽는 법에 대해 얘기하겠다. 'xlsx' vs 'csv' xlsx 파일은 이진파일로 구성이 되어 있으며 편집을 하는데 제한이 있다. 또한

baembaembaem.tistory.com

 

728x90
반응형

댓글