목차
파이썬에서 데이터 분석을 하기 위해 기본적으로 데이터를 불러와야 합니다. 분석을 위한 데이터는 보통 'csv'나'excel' 형식으로 되어 있을 가능성이 높습니다. 오늘은 데이터 분석을 위해 csv 파일을 로딩할 수 있는 pandas의 read_csv 함수에 대한 내용을 정리해 봅니다. 기본적인 인자에 대한 설명은 1~3절까지이며, encoding 에러는 4절, 포맷 에러의 경우 5절에 있으니 필요한 내용을 찾아 확인하시기 바랍니다.
1. pandas.read_csv() 함수의 기본 사용법
pandas의 read_csv() 함수는 CSV 파일을 읽어와 데이터프레임으로 변환하는 데 사용됩니다. 기본 시그니처는 아래와 같으며 해당 함수에는 많은 인자들이 포함되어 있습니다.
pandas.read_csv('파일명.csv')
위의 코드에서는 read_csv() 함수에 파일 경로를 전달하여 CSV 파일을 읽어옵니다. 이때, 인자 없이 기본 설정으로 호출하면 다음과 같은 동작을 수행합니다:
- CSV 파일은 파일 경로를 통해 지정됩니다.
- 파일 경로에 해당하는 CSV 파일을 UTF-8 인코딩으로 읽어옵니다.
- 첫 번째 행을 헤더로 간주하여 칼럼 이름을 설정합니다.
- 인덱스는 기본값으로 설정되어 숫자형 인덱스가 생성됩니다.
- 다른 인자들(구분자, 열 선택 등)은 기본값으로 처리됩니다.
즉, 인자 없이 read_csv() 함수를 사용하면 CSV 파일의 경로만을 지정하고, 나머지는 기본 설정에 의해 처리됩니다. 이러한 방식으로 CSV 파일을 읽어올 수 있으며, 필요에 따라 인자들을 추가하여 다양한 설정을 사용할 수 있습니다.
2. read_csv()의 형태와 인자들
처음에는 read_csv() 함수에 이렇게 많은 인자가 있는지 몰랐습니다. 사실 전체 인자를 다 알 필요는 없지만, 기본적으로 알아야 할 인자들은 코드 아래 정리해 두었습니다.
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None,
header='infer', names=None, index_col=None, usecols=None,
squeeze=False, prefix=None, mangle_dupe_cols=True,
dtype=None, engine=None, converters=None, true_values=None,
false_values=None, skipinitialspace=False, skiprows=None,
nrows=None, na_values=None, keep_default_na=True, na_filter=True,
verbose=False, skip_blank_lines=True, parse_dates=False,
infer_datetime_format=False, keep_date_col=False,
date_parser=None, dayfirst=False, cache_dates=True,
iterator=False, chunksize=None, compression='infer',
thousands=None, decimal='.', lineterminator=None, quotechar='"',
quoting=0, doublequote=True, escapechar=None, comment=None,
encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True,
delim_whitespace=False, low_memory=True, memory_map=False,
float_precision=None, storage_options=None)
filepath_or_buffer:
읽을 CSV 파일의 경로 (문자열) 또는 파일 객체입니다. CSV 파일의 경로를 지정합니다. 일반적으로 로컬 파일 시스템의 경로를 입력합니다. 예를 들어 'data.csv'와 같이 파일 이름을 지정할 수 있습니다.
sep & delimiter:
'sep'는 필드를 구분하는 문자열입니다. 기본값은 ', '(쉼표)입니다. 'delimiter' 또한 필드를 구분하는 문자열입니다. sep과 동일한 역할을 합니다. sep을 사용하는 것을 권장하며, 기본값은 None입니다.
header:
CSV 파일에 헤더(열 이름)가 포함되어 있는지 여부를 지정합니다. 기본값은 'infer'로, 자동으로 헤더를 추론합니다. 만약 헤더가 없는 경우에는 header=None으로 설정해야 합니다.
names:
칼럼의 이름을 지정할 리스트를 입력합니다. 주로 헤더가 없는 경우에 사용됩니다. 예를 들어 names=['Name', 'Age', 'City']와 같이 칼럼 이름을 리스트로 지정할 수 있습니다.
index_col:
인덱스로 사용할 칼럼을 지정합니다. 기본값은 None으로, 인덱스를 사용하지 않습니다. 예를 들어 index_col='ID'와 같이 인덱스로 사용할 칼럼 이름을 지정할 수 있습니다.
usecols:
사용할 칼럼을 선택하는 데 사용되는 인자입니다. 정수 인덱스, 칼럼 이름이나 칼럼 이름의 리스트를 지정할 수 있습니다. 예를 들어 usecols=[0, 2, 3]와 같이 0, 2, 3번째 칼럼만 선택할 수 있습니다
squeeze:
데이터가 1개의 칼럼만 존재하는 경우, 시리즈 객체로 반환할지 여부를 결정합니다. 기본값은 False로, 데이터프레임으로 반환됩니다.
dtype:
각 칼럼의 데이터 유형을 지정할 수 있는 인자입니다. 사전 형태로 {칼럼명: 데이터 유형} 형식으로 지정할 수 있습니다. 예를 들어 dtype={'Age': int, 'Salary': float}와 같이 칼럼 이름과 데이터 유형을 지정할 수 있습니다. 이를 통해 데이터 유형을 미리 지정하여 읽어올 수 있습니다.
skiprows:
건너뛸 행의 개수를 지정할 수 있습니다. 정수 값을 입력하거나 건너뛸 행의 인덱스가 담긴 리스트를 입력할 수 있습니다. 예를 들어 skiprows=3과 같이 처음 3개의 행을 건너뛸 수 있습니다. 또는 건너뛸 행의 인덱스가 담긴 리스트를 입력할 수도 있습니다.
3. encoding 인자 설정
위의 인자들은 기본적으로 설명드린 내용입니다. 사실 csv 파일을 불러올 때 자주 발생되는 에러로 encoding이 맞지 않는 경우 발생됩니다. 불러올 csv 파일이 어떤 형식으로 decoding 되었는지 잘 모르기 때문에 처음 불러올 때는 기본으로 불러와 보고, 에러 발생 시 encoding 값을 변경해 가면 오류가 발생되지 않는 encoding의 인자 값을 사용합니다.
기본적으로 read_csv() 함수는 UTF-8 인코딩을 가정하고 파일을 읽습니다. 하지만 데이터 파일이 다른 인코딩을 사용하고 있다면, encoding 인자를 사용하여 해당 인코딩을 명시적으로 지정해야 합니다. 일반적으로 사용되는 몇 가지 인코딩 옵션은 다음과 같습니다
'utf-8': UTF-8 인코딩입니다. 대부분의 경우 기본값으로 사용됩니다.
'utf-16': UTF-16 인코딩입니다.
'cp1252': Windows-1252 인코딩입니다. 윈도우 시스템에서 사용되는 기본 인코딩입니다.
'latin1': Latin-1 (ISO-8859-1) 인코딩입니다.
'ascii': ASCII 인코딩입니다. ASCII 문자 집합으로만 구성된 파일에 사용됩니다.
4. 한글 데이터가 포함된 csv 파일을 로딩 시 encoding 인자들
한글로 된 CSV 파일을 읽어 들일 때 인코딩 오류가 발생하는 경우, read_csv() 함수에 몇 가지 인자를 사용하여 문제를 해결할 수 있습니다. 주요한 인자들은 다음과 같습니다
encoding:
CSV 파일의 인코딩을 명시적으로 지정합니다. 한글로 된 파일의 경우, 대부분의 경우 'utf-8' 또는 'cp949' 인코딩을 사용합니다. 먼저 'utf-8'을 시도해 보고 문제가 여전히 발생한다면 'cp949'를 시도해 볼 수 있습니다.
engine:
CSV 파일 파싱 엔진을 선택합니다. 기본값은 'c'로 C 엔진을 사용합니다. 만약 인코딩 오류가 발생한다면, 'python'을 시도해 볼 수 있습니다. 'python' 엔진은 인코딩 처리를 좀 더 유연하게 수행합니다.
5. csv 파일 내에 형식 오류가 있는 경우
read_csv()는 파일을 읽어 들일 때 한 줄 한 줄 읽어 오게 됩니다. 만일 중간에 포맷에 맞지 않는 형식의 내용이 있으면 해당 파일을 읽어 들이지 못하고 에러를 발생합니다. 이럴 경우 이상한 부분의 데이터를 제외하고 정상 데이터만 받는 방법이 있습니다.
1) error_bad_lines:
기본적으로 read_csv() 함수는 포맷과 다른 줄이나 오류가 있는 줄을 만나면 오류를 발생시키고 데이터를 읽지 않습니다. 이때 error_bad_lines=True가 기본값입니다.
하지만 error_bad_lines=False로 설정하면, 오류가 있는 줄을 건너뛰고 데이터를 읽어옵니다. 이렇게 설정하면 오류가 있는 줄은 무시되고 나머지 정상적인 줄만이 데이터로 처리됩니다. 이 옵션을 사용하면 파일의 오류로 인해 전체 파일이 읽히지 않는 상황을 피할 수 있습니다.
2) warn_bad_lines:
warn_bad_lines는 read_csv() 함수의 인자 중 하나로, 오류가 있는 줄에 대한 경고 메시지 출력 여부를 설정하는 역할을 합니다. 이 인자의 입력값은 True 또는 False입니다.
기본적으로 warn_bad_lines는 True로 설정되어 있습니다. 이는 오류가 있는 줄에 대해 경고 메시지가 출력되도록 하는 것을 의미합니다. 경고 메시지에는 오류가 있는 줄의 위치와 관련된 정보가 포함됩니다.
반면에 warn_bad_lines=False로 설정하면, 오류가 있는 줄에 대한 경고 메시지를 출력하지 않습니다. 즉, 오류가 있는 줄에 대한 경고를 무시하고 출력되는 메시지를 없앱니다.
6. 마치며
지금까지 pandas.read_csv() 함수의 기본 사용법부터 함수의 주요 인자들에 대한 내용을 정리하였습니다. 또한, read_csv() 함수 사용 시 발생할 수 있는 몇몇 에러에 대한 조치 방안에 대해서도 같이 설명을 하였습니다.