오경석의 개발노트

Python_csv파일 불러오기 본문

프로그래밍 언어/Python

Python_csv파일 불러오기

OHSAYU 2022. 9. 5. 17:15

파이썬에서 데이터 분석을 할 때 가장 먼저 수행할 일은 csv나 excel파일을 불러오는 것이다. 

CSV(comma-separated values)는 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다. 확장자는 .csv이다. 

 

1. csv 파일을 불러오는 방법

import pandas as pd
crime_data = pd.read_csv("./Data/crime_data.csv", encoding="cp949")

    먼저 pandas 라이브러리를 import 한다. csv파일이나 excel파일을 불러오는 패키지는 Pandas 라이브러리 안에 존재하기 때문이다. 그다음 csv파일 데이터를 저장할 변수를 지정하고 pandas 라이브러리를 'pd'라는 별칭으로 설정했기 때문에 pd.read_csv 문장으로 데이터를 불러온다.

    필자는 스크립트 바깥에 Data라는 디렉터리에 csv파일을 저장했기 때문에 "./Data/crime_data.csv"라는 경로로 파일을 불러왔다. 참고로 파일을 불러올 땐 절대경로가 아닌 상대경로로 불러온다.

    마지막으로 파이썬은 한글 파일을 불러올 때 글자가 깨져서 에러가 나온다. 그 경우에는 파일을 불러오는 문장을 적은 뒤 encoding="cp949"를 적으면 된다. 그런 다음 crime_data를 출력하면 다음과 같은 결과가 출력된다.

데이터 출처 : 통계청

 

2. column이 없는 csv파일 불러오기

The Boston Housing Dataset

    위의 데이터를 보면 dataset에 컬럼이 존재하지 않는다. 이 데이터를 위와 같은 방법으로 불러오면 어떻게 될까?

다음과 같이 출력된다.

import pandas as pd


data = pd.read_csv('./housing.csv')
data

>>>

    위의 결과를 보면 컬럼을 지정해주지 않아서 첫 행의 값이 컬럼이 됐고 데이터가 분리되지 않아 각 행마다 하나의 데이터로 인식해버린다.

따라서, 컬럼이 없는 데이터셋이라면 컬럼(names)을 지정해주고 구분 문자(delimiter)를 설정해줘야한다.

import pandas as pd


column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

data = pd.read_csv('./housing.csv', names=column_names, delimiter=r"\s+")
data

>>>

    위의 결과를 보면 'column_names' 라는 컬럼 리스트 변수를 생성해 pd.read_csv 옵션에 컬럼을 지정해주는 names를 추가해서 총 14개의 컬럼을 지정했고, delimiter 옵션으로 whitespace로 데이터값을 구분하는 데이터를 처리하기 위해 정규식을 사용했다.

참고로 다음과 같이 delimiter 옵션이 아닌 delim_whitespace=True 옵션으로도 같은 결과를 출력한다.

import pandas as pd


column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

data = pd.read_csv('./housing.csv', names=column_names, delim_whitespace=True)
data

>>>

참고로 다음과 같이 공백 그 자체로 구분 문자를 설정하면 에러가 난다.

import pandas as pd


column_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']

data = pd.read_csv('./housing.csv', names=column_names, delimiter=" ")
data
>>>
ParserError: Error tokenizing data. C error: Expected 30 fields in line 2, saw 31

참고로 컬럼 이름을 지정하지 않고 그대로 사용하고 싶을 경우 첫번째 행이 컬럼으로 지정되는데 컬럼을 지정하고 싶지 않다면 header=None 옵션을 설정해준다.

import pandas as pd


data = pd.read_csv('./housing.csv', header=None)
data

>>>

 

 

참고자료 : http://daplus.net/python-pandas%EC%97%90%EC%84%9C-%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C-%EA%B5%AC%EB%B6%84-%EB%90%9C-%EA%B0%92%EC%9C%BC%EB%A1%9C-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%9D%BD%EB%8A%94-%EB%B0%A9%EB%B2%95/

'프로그래밍 언어 > Python' 카테고리의 다른 글

Python_Series  (0) 2022.09.06
Python_Pandas  (0) 2022.09.05
Python_변수의 개념과 생성, 작명법  (0) 2022.09.05
Python_스타일 가이드  (0) 2022.09.02
Python_클래스 정의  (0) 2022.08.31
Comments