Python 을 가지고 분석에 활용한다고 했을 때 데이터 전처리에 NumPy와 pandas library를 많이 사용합니다.  특히, 행과 열로 구성이 되어있는 DataFrame type 데이터를 입력, 처리, 조작할 때 pandas 가 매우 강력하고 편리합니다.

 

 

Python의 pandas library의 read_csv() 함수를 사용해서 외부 text 파일, csv 파일을 불러와서 DataFrame으로 저장하는 방법에 대해서 소개하겠습니다.

 

 

 1. csv 파일 불러오기 : read_csv()

 

 

아래와 같이 ID, LAST_NAME, AGE 3개의 열(column)을 가지고 있고, 5개의 행(row) 가지고 있는, 콤마로 구분된 CSV 파일(comma sepeated file)을 예제로 사용하겠습니다.

 

[예제 CSV 파일 : test_csv_file.csv =>  test_csv_file.csv   ]

 

ID

LAST_NAME

AGE

1

KIM

30

2

CHOI

25

3

LEE

41

4

PARK

19

5

LIM

36

 

 

import 로 pandas library를 호출한 다음에 read_csv() 함수에 파일 경로파일 이름을 적어주면 됩니다. csv 파일은 구분자(separator, delimiter)를 명시적으로 ',' (comma)라고 지정해주지 않아도 알아서 잘 불러옵니다.

 

 

>>> import pandas as pd
>>> csv_test = pd.read_csv('C:/Users/Administrator/Documents/Python/test_csv_file.csv')

 

 

 

 

DataFrame.shape 을 사용해서 행(row)과 열(column)의 개수를 확인해보고, 행과 열이 몇 개 안되므로 indexing 없이 전체를 호출해보겠습니다.

 

 

>>> csv_test.shape # number of rows, columns
(5, 3)
>>> csv_test 
   ID LAST_NAME  AGE
0   1       KIM   30
1   2      CHOI   25
2   3       LEE   41
3   4      PARK   19
4   5       LIM   36

 

 

 

 

Spyder (Python 3.5) 의 'Variable explorer' 창에 보면 csv 라는 이름의 DataFrame 이 신규로 생성되었으며, Size 란에 보면 (5, 3) 으로서 5개 행(rows), 3개 열(columns)으로 구성되어 있음을 알 수 있습니다.

 

csv DataFrame 이름을 클릭하면 아래 그림처럼 행과 열로 구성된 2차원이 DataFrame을 열어서 볼 수 있습니다.

 

 

 

 

 

 2. 구분자 '|' 인 text 파일 불러오기 : sep='|'

 

이번에는 구분자가 콤마(,)가 아닌 다른 기호, 가령, 수직 막대기 '|' 인 경우의 text 파일을 불러와보도록 하겠습니다. 

 

[ 예제 test_text_file.txt  =>  test_text_file.txt   ]

ID|A|B|C|D
C1|1|2|3|4
C2|5|6|7|8
C3|1|3|5|7

 

 

 

read_csv() 함수는 동일하며, 파일 경로와 text 파일 이름을 써주고, 구분자(separator, delimiter)에 sep='|' 를 추가해줍니다.

 

 

>>> text_test = pd.read_csv('C:/Users/Administrator/Documents/Python/test_text_file.txt', sep='|')
>>> text_test
   ID  A  B  C  D
0  C1  1  2  3  4
1  C2  5  6  7  8
2  C3  1  3  5  7

 

 


만약 구분자가 탭(tab) 이라면 sep = '\t' 을 입력해줍니다.  



 

 3. 파일 불러올 때 index 지정해주기 : index_col

 

 

만약에 위의 예에서 첫번째 열인 'ID'라는 이름의 변수를 Index 로 지정해주고 싶으면 index_col=0 (위치)이나 index_col='ID' 처럼 직접 변수 이름을 지정해주면 됩니다.

 

 

>>> # pass the column number you wish to use as the index:
... pd.read_csv('C:/Users/Administrator/Documents/Python/test_text_file.txt', sep='|', index_col=0)
    A  B  C  D
ID           
C1  1  2  3  4
C2  5  6  7  8
C3  1  3  5  7

 

 

 

>>> # pass the column name you wish to use as the index:
... pd.read_csv('C:/Users/Administrator/Documents/Python/test_text_file.txt', sep='|', index_col='ID')
    A  B  C  D
ID           
C1  1  2  3  4
C2  5  6  7  8
C3  1  3  5  7

 

 

 

 

 

 4. 변수 이름(column name, header) 이 없는 파일 불러올 때 이름 부여하기

     : names=['X1', 'X2', ... ], header=None

 

 

[ 예제 : 변수 이름이 없는 text 파일(no header)  =>  text_without_column_name.txt ]

 

C1|1|2|3|4
C2|5|6|7|8
C3|1|3|5|7

 

 

names=['ID', 'A', 'B', 'C', 'D'] 와 같이 칼럼 이름을 부여해줍니다.  header=None 은 칼럼 이름이 없다는 뜻이며, 만약 1번째 행이 칼럼 이름이라면 header=0 으로 지정해주면 됩니다.

 

 

>>> # naming columns :
... pd.read_csv('C:/Users/Administrator/Documents/Python/text_without_column_name.txt', sep='|', names=['ID', 'A', 'B', 'C', 'D'], header=None, index_col='ID')
    A  B  C  D
ID           
C1  1  2  3  4
C2  5  6  7  8
C3  1  3  5  7

 

 

 

 

 5. 유니코드 디코드 에러, UnicodeDecodeError: 'utf-8' codec can't decode byte

 

불러오려는 text, csv 파일의 encoding 설정과 Python encoding 설정이 서로 맞지 않으면 UnicodeDecodeError 가 발생합니다.  한글은 보통 'utf-8' 을 많이 사용하는데요, 만약 아래처럼 'utf-8' 코덱을 decode 할 수 없다고 에러 메시지가 나오는 경우가 있습니다.

 

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

이럴 경우에는 Windows에서 많이 사용하는 'CP949'로 아래처럼 encoding을 설정해서 text, csv 파일 불러오기를 해보시기 바랍니다.

 

 

f = pd.read_csv('directory/file', sep='|'', encoding='CP949')

 

 

혹시 encoding='CP949' 로 해도 안되면 코덱 확인해보셔야 할텐데요, 코덱을 모두 설명하기에는 너무 양이 많으므로 이하 생략합니다.



 6. 특정 줄은 제외하고 불러오기: skiprows = [x, x]


skip rows 옵션을 사용하여 첫번째와 두번째 줄은 제외하고 csv 파일을 DataFrame으로 불러와보겠습니다. 



# skip 1st and 2nd rows (do not read 1, 2 rows)

csv_2 = pd.read_csv("C:/Users/admin/Documents/data/test_csv_file.csv", 

                           skiprows = [1, 2])  







 7. n 개의 행만 불러오기: nrows = n


csv 파일의 위에서 부터 3개의 행(rows) 만 DataFrame으로 불어와보겠습니다. 


 

# read top 3 rows only

csv_3 = pd.read_csv("C:/Users/admin/Documents/data/test_csv_file.csv", 

                    nrows = 3)






Python pandas 라이브러리의 read_csv() 함수를 이용한 text, csv 파일 불러오기 소개를 마치겠습니다.

 

많은 도움 되었기를 바랍니다.

 

 

Posted by R Friend R_Friend