인공지능/파이썬

파이썬으로 .csv 파일 읽기

백관구 2023. 2. 8. 15:37
반응형

안녕하세요 :)

 

    저번 포스팅은 파이썬으로 소리 파일 중 하나인 .wav 포맷의 파일을 읽는 방법에 대해 알아봤습니다. 이번 포스팅에서는 데이터 분석에서 가장 자주 사용되는 .csv 포맷 파일을 읽는 방법을 다루겠습니다.

 

파이썬으로 .wav 파일 읽기

안녕하세요 :) 데이콘 대회를 준비하던 중 음성 데이터(.wav)를 처리해야 해서 이것저것 시도해보다가 가장 간단한 방법을 찾았습니다. scipy 패키지를 사용하면 손쉽게 wav 파일을 읽을 수 있습니

data-science-note.tistory.com

 


 

    파이썬에서 CSV 파일을 다루기 위해 일반적으로 사용되는 API는 Pandas 입니다. Pandas (판다스)는 DataFrame 또는 Series 라는 형태의 객체를 생성하는데 주로 사용되며, 우리가 접하는 데이터 중 행과 열로 구성된 테이블 형태의 데이터를 다루기에 적합한 API 입니다. 수치연산에 쓰이는 Numpy와 함께 파이썬 데이터 분석에서 가장 많이 사용되는 API 입니다.

 

pandas documentation — pandas 1.5.3 documentation

The reference guide contains a detailed description of the pandas API. The reference describes how the methods work and which parameters can be used. It assumes that you have an understanding of the key concepts.

pandas.pydata.org

 


 

데이터 준비

korea_airquality__20181001.csv
0.00MB

    여기서 사용할 CSV 파일을 준비합니다. 위 파일은 2018년 10월 1일의 국내 대기오염농도 일부를 저장한 CSV 파일입니다. 출처는 한국환경공단 산하에 에어코리아에서 가져왔습니다. 에어코리아 홈페이지에서 [통계정보] → [최종확정 측정자료 조회] → [확정자료 다운로드] 로 접속하시면 더 많은 대기오염농도 데이터를 직접 다운로드 받을 수 있습니다.

 

에어코리아

데이터 처리중입니다. 잠시만 기다려 주시기 바랍니다. 서울 보통 인천 보통 경기북부 보통 경기남부 보통 영서 보통 영동 보통 대전 보통 세종 보통 충북 보통 충남 보통 부산 보통 대구 보통

www.airkorea.or.kr

 

    위 첨부파일을 받으셨다면, CSV 파일의 내용을 확인하기 위해 엑셀을 사용해 열어보겠습니다. 엑셀이 없다면 워드패드, 메모장 같은 프로그램을 사용해도 됩니다. 파일을 열어보면 CODE, DATE, SO2, CO, O3, NO2, PM10, PM25 컬럼으로 구성된 데이터를 확인할 수 있습니다. 각 컬럼이 숫자(정수, 소수)인지 또는 문자인지 보면 CODE / DATE / PM10 / PM25는 정수(integer), SO2 / CO / O3 / NO2는 실수(float)입니다. 이러한 컬럼별 데이터 타입도 분석에서 짚고 넘어가야 할 부분이기에 확인은 필수입니다. 그럼 본격적으로 Pandas API를 활용해 파이썬으로 CSV 파일을 읽는 방법을 알아보겠습니다.

 

(왼쪽) Excel, (오른쪽) 메모장

 


 

pandas.read_csv

    Pandas를 사용해 CSV 파일을 읽어오는 방법입니다. 여기서 사용되는 함수는 pandas.read_csv 입니다. 아래에 코드 먼저 보겠습니다. 아래와 같이 pandas.read_csv로 읽은 CSV 파일을 출력해보면 컬럼은 파일의 첫번째 행인 CODE, ..., PM25로 배정되었고, 인덱스는 0, 1, 2, ... 순서대로 배정되었음을 확인할 수 있습니다.

import pandas as pd # Pandas API 불러오기

df = pd.read_csv('korea_airquality__20181001.csv') # pandas.read_csv로 csv 파일 읽기
print(df) # 객체 df 출력

pandas.read_csv

 

    객체 df의 정보를 좀 더 살펴보겠습니다. 이 때는 객체 뒤에 .info() 코드를 사용합니다. 출력은 아래 그림과 같이 나옵니다.

df.info() # 객체 df 전체적인 정보 확인

pandas.DataFrame.info()

 

    첫번째 줄은 class 'pandas.core.frame.DataFrame'으로 객체 df의 타입을 나타냅니다. DataFrame은 Pandas에서 다루는 대표적인 데이터 양식입니다. 두번째 줄은 인덱스 정보입니다. 데이터가 총 29개의 행으로 구성되어 있고, 인덱스가 0에서 28까지 배정되어 있음을 의미합니다. 세번째 줄은 컬럼에 대한 내용으로 총 8개 컬럼으로 데이터가 구성되어 있음을 나타냅니다. 그 다음 줄부터는 컬럼 정보를 표현합니다. CODE / DATE / ... / PM25와 같은 컬럼이 있고, 각 컬럼에 NULL 값이 아닌 갯수와 데이터 타입이 순서대로 기입됩니다. 즉, 이 데이터는 모든 컬럼에 NULL 값이 없으며 CODE / DATE / PM10 / PM25는 정수(int64), SO2 / CO / O3 / NO2는 실수(float64) 타입으로 지정됐습니다. 그 다음 줄은 dtypes에 대한 정보로 float64와 int64로 지정된 컬럼이 각각 4개씩임을 알 수 있습니다. 마지막 줄은 객체 용량을 나타내며 여기서 객체 df의 용량은 1.9 KB 입니다.

 

반응형

 


 

인덱스 설정 (index_col)

    이번에는 특정 컬럼을 인덱스로 지정해서 읽어오는 방법을 살펴보겠습니다. 데이터를 보면 대기오염농도를 시계열 데이터로 다루기 위해서 DATE 컬럼을 인덱스로 사용하면 편할 것 같다는 생각이 듭니다. 이 경우 위에서 다룬 객체 df에 set_index를 사용해서 특정 컬럼을 인덱스로 지정할 수 있습니다.

df.set_index('DATE', inplace = True) # 객체 df의 인덱스를 'DATE' 컬럼으로 설정
print(df) # 객체 df 출력

pandas.DataFrame.set_index('DATE')

 

    또는 pandas.read_csv를 사용해 CSV 파일을 읽어올 때부터 특정 컬럼을 인덱스로 지정해 객체를 생성할 수도 있습니다. 이 때는 아래 코드 예시처럼 pandas.read_csv 괄호 안에 index_col 이라는 설정을 줘야 합니다. 아무 설정도 하지 않고 읽었을 때는 인덱스가 0, 1, 2, ... 이었지만, DATE 컬럼을 인덱스로 설정해 읽어오니 DATE 컬럼의 값들이 인덱스로 지정됐습니다. .info()를 통해 확인한 객체 set_index_df의 정보를 보면, 인덱스가 기존의 0, 1, 2, ...가 아닌 2018100101 ~ 2018100205로 바뀌었습니다. 그리고 컬럼 정보에서 DATE가 없어졌습니다 (∵ 인덱스로 사용되었기 때문입니다).

set_index_df = pd.read_csv('korea_airquality__20181001.csv', index_col = 'DATE') # DATE 컬럼을 인덱스로 지정
print(set_index_df) # 객체 set_index_df 출력

index_col = 'DATE'

 


 

pandas.read_csv의 여러 설정들

    여기까지 Pandas API를 사용해 CSV 파일을 읽는 방법에 대해 살펴봤습니다. index_col 외에도 다양한 설정을 사용해 CSV 파일을 읽을 수 있습니다. 이 링크로 들어가시면 pandas.read_csv에 사용되는 여러 설정들이 있습니다. 그 중에 자주 사용되는 설정 몇 가지를 소개드립니다.

 

header

    컬럼명으로 사용할 행을 지정합니다. 예를 들어, header = 0 으로 설정하면 파일 내용의 첫번째 행을 컬럼명으로 사용합니다. 만약 header = None 으로 설정하면 컬럼명은 0, 1, 2, ... 이런 방식으로 지정됩니다.

header = 0
header = None

 

index_col

    인덱스로 사용할 컬럼을 지정합니다. 위에 인덱스 설정 부분을 참고해주세요.

 

usecols

    특정 컬럼들만 객체로 불러옵니다. 예를 들어, usecols = [0, 1, 3] 으로 설정하면 파일 내용의 첫번째(0), 두번째(1), 네번째(3) 열만 읽어올 수 있습니다. 또는 usecols = ['CODE', 'DATE', 'CO'] 처럼 컬럼명으로 설정해도 됩니다.

usecols = [0, 1, 3]
usecols = ['CODE', 'DATE', 'CO']

 

skiprows

    몇 개의 행을 제외하고 읽을 것인지(정수) 또는 특정 행들을 제외하고 읽을 것인지(리스트) 설정합니다. 예를 들어, skiprows = 2 로 설정하면 파일 내용의 2개 행을 제외하고 읽어옵니다. 만약 skiprows = [0, 3] 처럼 리스트로 설정하면 지정한 첫번째(0), 네번째(3) 행을 제외하고 읽어옵니다.

skiprows = 2
skiprows = [0, 3]

 

encoding

    읽을 대상인 CSV 파일의 인코딩 형식에 따라 지정합니다. 초기값으로는 'utf-8'로 인코딩되며, 이 외에도 'cp949', 'euc_kr', 'utf_8_sig' 가 데이터에 따라 사용됩니다. 더 다양한 인코딩 양식은 여기에서 확인 가능합니다.

 

codecs — Codec registry and base classes

Source code: Lib/codecs.py This module defines base classes for standard Python codecs (encoders and decoders) and provides access to the internal Python codec registry, which manages the codec and...

docs.python.org

 


 

    이상으로 파이썬 Pandas API를 활용해 CSV 파일을 읽는 방법을 자세히 살펴봤습니다. 분석하시는 데이터에 알맞은 설정을 적용하시면 될 것 같습니다.

감사합니다 :>

반응형