반응형

요즘 데이터 분석 공부를 하면서 pandas를 거의 매번 사용하게 된다. 그만큼 파이썬에서는 필수적인 라이브러리가 되었기 때문이 아닐까 한다. 

그럼 가장 기본이 되는 데이터 읽는 방법부터 정리해 보도록 하자.

pandas에서는 위와 같은 명령어를 통해 다양한 파일 형태를 읽어들이고, 쓸 수 있다.

그럼 먼저 가장 많이 사용하는 CSV 파일 읽어들이기를 중심으로 정리해 보도록 하겠다.

 

1. CSV와 텍스트 파일들

보통 데이터는 일반적으로 표 형식으로 사용한다. 한 행에 있는 값이 쉼표로 구분되면 CSV(쉼표로 구분된 값)형식이 된다. 이 형식은 아마 가장 잘 알려져 있고 가장 많이 사용하는 형식일 것이다.

다른 표 형식의 데이터는 공백이나 탭으로 구분할 수도 있으며 일반적으로 다양한 유형의 텍스트 파일(일반적으로 .txt 확장명)에 포함되어 있다. 

이 유형의 파일은 가장 일반적인 데이터 소스이며 쉽게 기록하고 해석할 수 있다.

이와 관련하여 pandas는 이 유형의 파에에 대해 특정 기능 세트를 제공한다.

- read_csv

- read_table

 

2. CSV 또는 텍스트 파일에서 데이터 읽기

>> import pandas as pd

S&P500 지수 데이터를 읽어온다(investing 사이트에서 추출).

각 필드는 심볼과 회사 이름, 사업분야, 사업세부분야로 구분되어 있는 CSV 파일이다(이는 기존에 추출해서 저장함. 어떤 CSV파일이든 상관없음).

>> csv_file = pd.read_csv('data/sp500.csv', names = ['symbol', 'name', 'sector', 'industry'])

여기서 읽어들인 데이터의 컬럼들의 헤더명을 설정하기 위해 names=[]을 사용한다.

>> csv_file

알수도 있지만, CSV 파일에서 데이터를 읽어들이는 다른 방법이 있다. CSV파일은 같은 열의 값이 쉼표로 구분된 표로 만들어진 데이터다. CSV파일은 텍스트 파일로 간주되므로 read_table()함수를 사용할 수도 있다(구분기호를 지정하여).

반응형

>> pd.read_table('data/sp500.csv', sep=',')

위 예에서, 모든 컬럼의 헤더 이름을 names=[]로 정의했다. 만약, 정의하지 않고 그냥 읽어들이면 첫번째 열이 컬럼의 헤더 이름이 된다. 그렇기 때문에 첫번째 열을 헤더로 설정하지 않기 위해서 names=[]로 정의하던지, 컬럼 수를 파악하기 어려울땐 header=None을 사용해서 컬럼들에 0으로 시작하는 기본 이름을 할당해야 한다. 또 하나 주어진 컬럼을 인덱스로 변환해서 계층형 인덱스로 할당하기 위해서는, read_csv()에 index_col 옵션을 추가함으로써 수행할 수 있다.

3. 텍스트 파일을 읽기 위해 RegExp 사용하기

콤마와 세미콜론으로 분리된 경우 말고, 다른 구분기호를 사용한 데이터를 읽어들여야 할 경우도 있다. 이 경우 정규표현식이 우리에게 도움이 된다. 사실 sep 옵션을 사용하여 read_table() 암수에서 정규표현식을 지정할 수 있다.

[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식들은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.

  • \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
  • \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
  • \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
  • \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식이다.

<정규표현식 출처 : 점프 투 파이썬 https://wikidocs.net/4308>

skiprows 옵션을 사용하면 원하는 모든 행을 제외할 수 있다. 이 옵션을 사용할 때 주의할 사항이 있다. 첫번째부터 다섯 줄을 제외시키려면 skiprow=5라고 써야 하지만, 다섯번째 줄만 제외하려면 skiprows =[5]라고 써야 한다.

 

4. 텍스트 파일에서 일부분만 읽어들이기

대용량 파일을 처리하거나 이러한 파일의 일부에만 관심이 있는 경우 파일을 부분(청크)으로 읽어야 한다. 이는 반복을 적용하기 위한 것이고 전체 파일을 파싱하는데 관심이 없기 때문이다. 

예를 들어, 파일의 일부분만 읽으려는 경우 구문 분석을 할 줄수를 명시적으로 지정할 수 있다.

>> pd.read_csv('test.csv', skiprows=[2], nrows=3, header=None)

       0    1    2    3      4

0     1    5    2    3   cat

1     2    7    8    5   dog

2     2    2    8    3 duck

nrows 옵션은 읽을 파일의 행 수를 말한다. 대용량 파일을 읽는 데 유용하다.

 

<Source : Python Data Analytics, Apress>

 

 

반응형

+ Recent posts