colab python 판다스 데이터 불러오기

HJ Koo·2022년 2월 16일
0

개념

데이터 형식

csv(Comma Separated Values)

값을 쉼표로 구분하는 데이터 형식. 호환성이 높고 텍스트 형식이기 때문에 사람이 읽기 쉽다는 점에서 자주 쓰인다. 하지만 큰 데이터(기가,테라 단위가 넘어가는)를 저장하기에는 효율적인 방식은 아니다.

판다스 데이터를 읽는 함수

판다스에서는 데이터를 읽어들이는 여러 함수를 제공한다. 이 중에서 read_csv를 사용할 것이다.


데이터 불러오기, 내보내기

불러오기

먼저 데이터를 생성.
csv는 형식이 단순하기 때문에 파이썬의 파일 쓰기 기능으로도 간단히 csv 파일을 생성할 수 있다.

f = open("ex1.csv", "w")
f.write("a,b,c,d,message\n") #컬럼이름(=헤더)
f.write("1,2,3,4,hello\n")
f.write("5,6,7,8,world\n")
f.write("9,10,11,12,foo\n")
f.close()

판다스의 read_csv 함수로 파일을 읽어 오기.

import pandas as pd
df = pd.read_csv("ex1.csv")
df

위의 csv파일은 컬럼 첫 번째 줄처럼 헤더를 명시해 주었지만, 헤더가 없는 csv파일도 있다.

이런 경우 read_csv에서 헤더가 없다고 표시해주거나 헤더를 직접 지정할 수 있다.

pd.read_csv('파일이름.csv', header=None) #이렇게하면 헤더는 인덱스로 명시된다
# 또는
pd.read_csv('ex2.csv', names=['a', 'b', 'c', 'd', 'message']) #names로 헤더 직접 명시

csv파일 중에는 comma가 아닌 다른 기호로 값을 구분하기도 한다. 이런 경우 원하는 구분자를 넣어 값을 구분해 줄 수 있다. 아래처럼 sep 파라미터를 이용해서 구분자(separator)를 지정해줄 수도 있다. 디폴트 값은 쉼표.

pd.read_csv("ex1.csv", sep=",") # sep=' ' 안에 원하는 기호 넣기

csv 파일의 인코딩이 표준인 utf-8이 아닌 경우도 있다. 이 경우 인코딩을 지정해주어야 한다. 간혹 맥/리눅스와 윈도우 사이에 파일을 주고받을 때 깨지는 경험을 해본 적 있을 것이다. 윈도우의 기본 인코딩이 utf-8이 아니기 때문이다. 참고로 한글판 윈도우에서 흔히 쓰이는 인코딩 방식은 cp949이다.

# 인코딩 지정해 주는 방법
pd.read_csv("ex3.csv", encoding="...")

인코딩 지정해주는 방법 예시

f = open("ex3.csv", "w", encoding="cp949")
f.write("하나,둘,셋,넷,문자\n")
f.write("1,2,3,4,hello\n")
f.write("5,6,7,8,world\n")
f.write("9,10,11,12,foo\n")
f.close()

pd.read_csv("ex3.csv") # -> encoding 기본값이 utf-8 때문에 에러 발생
pd.read_csv("ex3.csv", encoding='cp949') # encoding 지정해주기

내보내기(저장)

csv 형식으로 데이터를 저장하고 싶을 때는 to_csv 메서드를 이용한다.

data = pd.read_csv('ex1.csv') # 데이터프레임을 읽어오고
data.to_csv('out.csv') # 경로를 지정해서 파일을 저장해준다
!ls # 저장 확인

csv 형식으로 저장할 때도 sep 파라미터를 사용해서 구분자(separator)를 바꿀 수 있다.

data.to_csv("out.csv", sep='|')
!cat out.csv #내용 살펴보기

판다스에서 csv를 쓸 때 기본적으로 행과 열 레이블을 모두 저장한다. 옵션으로 인덱스와 헤더를 저장하지 않을 수 있다.

data.to_csv('out.csv', index=False, header=False)
!cat out.csv #내용 살펴보기

조심해야 할 점은 만약 데이터테이블에 행 레이블이 없다면 판다스는 디폴트로 csv에 기본 인덱스인 숫자값들을 적는다는 것이다. 이렇게 저장된 데이터를 read_csv로 다시 읽어들였을 때 판다스가 저장되어 있는 행 레이블을 컬럼으로 잘못 해석해서 불필요한 컬럼이 들어온다. 이를 막기 위해 직접 지정한 인덱스가 없는 경우에는 인덱스를 저장하지 않는 것이 좋다.

❌데이터를 불러올 때 불필요한 컬럼 생성
data.to_csv('out.csv')
pd.read_csv('out.csv')
⭕️저장한 데이터와 불러온 데이터가 일치함
data.to_csv('out.csv', index=False) → 이렇게 저장해야 불러올때 잘 못 해석하지 않는다.
pd.read_csv('out.csv')

profile
날마다 꾸준히 성장하는 Software Engineer

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN