본문 바로가기
공부 목록/IT & 프로그래밍

pandas 의 read_csv 함수 사용 시 에러가 발생한다면?

by 독학박사 2023. 5. 28.

목차


     파이썬에서 데이터 분석을 하기 위해 기본적으로 데이터를 불러와야 합니다. 분석을 위한 데이터는 보통 'csv''excel' 형식으로 되어 있을 가능성이 높습니다. 오늘은 데이터 분석을 위해 csv 파일을 로딩할  있는 pandas의 read_csv 함수에 대한 내용을 정리해 봅니다. 기본적인 인자에 대한 설명은 1~3절까지이며, encoding 에러는 4, 포맷 에러의 경우 5절에 있으니 필요한 내용을 찾아 확인하시기 바랍니다.

     

     

    read_csv() 함수에서 에러가 발생하면?
    read_csv() 함수에서 에러가 발생하면?

     

     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() 함수 사용 시 발생할 수 있는 몇몇 에러에 대한 조치 방안에 대해서도 같이 설명을 하였습니다.