Pandas 패키지의 read_csv() 함수는 데이터 분석을 하기 위해 CSV(Comma-Separated Values) 파일을 데이터프레임으로 변환하는 함수입니다. 또한 파일을 청크(Chunk)로 반복하거나 분할하는 것도 지원합니다. 이번 포스팅에서는 read_csv() 함수의 사용법과 인수(parameter)에 대해서 알아 보겠습니다.
read_csv()
read_csv() 함수의 전체 구문은 아래와 같습니다. 매우 많은 인수가 포함되어 있는데요. 모든 인수를 다 아실 필요는 없습니다. 자주 사용되는 몇 가지 인수만 아시면, 데이터 분석을 하시는 데에 어려움이 없습니다. 실제 데이터 분석을 할 때, 많이 사용하는 인수들에 대해서 설명하겠습니다.
pandas.read_csv(filepath_or_buffer, *,
sep=_NoDefault.no_default,
delimiter=None,
header=’infer’,
names=_NoDefault.no_default,
index_col=None,
usecols=None,
dtype=None,
engine=None,
converters=None,
true_values=None,
false_values=None,
skipinitialspace=False,
skiprows=None,
skipfooter=0,
nrows=None,
na_values=None,
keep_default_na=True,
na_filter=True,
verbose=False,
skip_blank_lines=True,
parse_dates=None,
infer_datetime_format=_NoDefault.no_default,
keep_date_col=False,
date_parser=_NoDefault.no_default,
date_format=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,
encoding_errors=’strict’,
dialect=None,
on_bad_lines=’error’,
delim_whitespace=False,
low_memory=True,
memory_map=False,
float_precision=None,
storage_options=None,
dtype_backend=_NoDefault.no_default)
filepath_or_buffer 인수 : str, path object or file-like object
데이터프레임으로 변환하고자 하는 파일이 위치한 경로명과 파일명을 나타냅니다.
- 유효한 문자열로 이루어진 경로를 사용할 수 있습니다. 문자열은 URL도 가능합니다. 유효한 URL 스키마에는 http, ftp, s3, gs 및 파일이 포함됩니다. 파일 URL의 경우 호스트가 필요합니다. 로컬 파일은 file://localhost/path/to/table.csv일 수 있습니다.
- 경로 객체를 전달하려는 경우 pandas는 모든 os.PathLike를 허용합니다.
- 파일과 같은 객체는 파일 핸들(예: 내장된 open 함수를 통해) 또는 StringIO와 같은 read() 메소드가 있는 객체를 참조합니다.
sep 인수 : str, default ‘,’
칼럼과 칼럼을 구분하는 데 사용할 구분 기호를 나타냅니다.
- sep가 None이면 C 엔진은 구분자를 자동으로 감지할 수 없지만 Python 구문 분석 엔진은 가능합니다. 즉, Python의 내장 스니퍼 도구 csv.Sniffer가 구분자를 사용하고 자동으로 감지합니다.
- 1개의 문자보다 길고 ‘\s+’와 다른 구분 기호는 정규표현식으로 해석되며 Python 구문 분석 엔진을 강제로 사용합니다.
- 정규표현식 구분 기호는 인용된 데이터를 무시하는 경향이 있습니다.
delimiter 인수 : str, default ‘,’
sep 인수에 대한 별칭을 나타냅니다.
header 인수 : int, list of int, None, default ‘infer’
열 이름으로 사용할 행 번호와 데이터의 시작을 나타냅니다.입니다.
- 기본 값은 첫 행을 열 이름으로 인식합니다. 즉, 열 이름이 전달되지 않으면, header=0이 기본 값으로 주어지고, 파일의 첫 번째 줄을 열 이름으로 판단합니다.
- 열 이름이 명시적으로 전달되면 동작은 header=None과 동일합니다. 기존의 열 이름을 바꿀 수 있도록 header=0을 명시적으로 전달합니다.
- header는 [0,1,3] 처럼 열의 다중 인덱스에 대한 행 위치를 지정하는 정수 리스트일 수 있습니다. 지정되지 않은 중간 행은 건너뜁니다(예: 이 예에서 2는 건너뜀). header는 skip_blank_lines=True인 경우 주석 처리된 행과 빈 행을 무시하므로 header=0은 파일의 첫 번째 행이 아니라 데이터의 첫 번째 행을 나타냅니다.
names 인수 : array-like, optional
사용할 열 이름 리스트를 나타냅니다.
- 파일에 헤더 행이 포함된 경우 header=0을 명시적으로 전달하여 열 이름을 재정의해야 합니다.
- 열 이름 리스트에는 중복된 값이 들어가면 안됩니다.
index_col 인수 : int, str, sequence of int / str, or False, optional, default
문자열 이름 또는 열 인덱스로 지정된 DataFrame의 행 레이블로 사용할 열 이름을 나타냅니다.
- int 와 str의 시퀀스가 주어지면 MultiIndex가 사용됩니다.
- 각 줄 끝에 구분 기호가 있는 형식이 잘못된 파일이 있는 경우, index_col = False를 사용하여 pandas가 첫 번째 열을 인덱스로 사용하지 않도록 할 수 있습니다.
usecols 인수 : list-like or callable, optional
데이터프레임으로 변환하고자 하는 열의 하위 집합을 나타냅니다.
- 리스트 같은 경우 모든 요소는 위치(즉, 문서 열에 대한 정수 인덱스)이거나 header 행에서 유추된 열 이름에 해당하는 문자열이어야 합니다.
- 사용자가 이름으로 제공하더라도 header 행에서 유추된 열 이름에 해당하는 문자열이어야 합니다. 단, 사용자가 names를 지정한 경우라면 자료 header행은 고려되지 않습니다.
- 예를 들어 리스트형의 usecols 매개변수는 [0, 1, 2] 또는 [‘foo’, ‘bar’, ‘baz’]라고 가정해 보죠. 요소 순서는 상관없기 때문에 usecols=[0, 1]과 usecols=[1, 0]의 결과는 동일하게 첫 번째와 두 번째 열을 반환합니다.
- [‘foo’, ‘bar’] 순서로 데이터프레임을 인스턴스화 하려면 pd.read_csv(data, usecols=[‘foo’, ‘bar’])[[‘foo’, ‘bar’]]를 사용해야 하고,
- [‘bar’, ‘foo’] 순서로 데이터프레임을 인스턴스화 하려면 pd.read_csv(data, usecols=[‘foo’, ‘bar’])[[‘bar’, ‘foo’]]를 사용해야 합니다.
- callable 형태로 나타내려면, 호출 가능한 함수(collabel function)가 열 이름에 대해서 True로 평가되는 이름을 반환해야 합니다. 유효한 호출 가능 인수의 예는 lambda x: x.upper() in [‘AAA’, ‘BBB’, ‘DDD’]입니다. 이 매개변수를 사용하면 분석 시간이 훨씬 빨라지고 메모리 사용량이 줄어드는 장점이 있습니다.
dtype 인수 : Type name or dict of column -> type, optional
{‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’}처럼 데이터 또는 열의 데이터 유형을 지정할 수 있습니다.
skiprows 인수 : list-like, int or callable, optional
파일 시작 부분에서 건너뛸 줄 번호(0-색인) 또는 건너뛸 줄 수(int)를 나타냅니다.
- callable인 경우 호출 가능한 함수는 행 인덱스에 대해 평가되며 행을 건너뛰어야 하는 경우 True를 반환하고, 그렇지 않으면 False를 반환합니다(Ex. skiprows = lambda x: x in [0, 2]입니다.
skipfooter 인수 : int, default 0
파일에서 건너뛸 맨 아래 줄 수를 나타냅니다. skipfooter = 1이라면, 파일의 맨 아래 한 줄을 데이터프레임으로 변환하지 않습니다.
nrows 인수 : int, optional
읽을 파일의 행 수를 나타냅니다. 대용량 파일의 일부를 읽는 데 유용합니다.
a_values 인수 : scalar, str, list-like, or dict, optional
NA/NaN으로 인식할 추가 문자열을 나타냅니다. 딕셔너리 형태로 표현한다면, 특정 열 당 NA 값을 나타내야 합니다. 기본적으로 ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘None’, ‘n/a’, ‘nan’, ‘null’ 값들은 NaN으로 해석합니다.
keep_default_na 인수 : bool, default True
데이터를 파싱할 때 기본 NaN 값을 포함할지 여부를 나타냅니다.
chunksize 인수 : int, optional
반복을 위한 TextFileReader 객체를 반환합니다.
encoding 인수 : str, optional, default “utf-8”
읽기/쓰기 시 UTF에 사용할 인코딩(ex. ‘utf-8’) 방식을 나타냅니다.
read_csv() 함수 Returns
DataFrame or TextFileReader 을 반환합니다.