데이터 입출력
Pandas는 데이터 파일을 읽어서 DataFrame을 만들거나 DataFrame을 데이터 파일로 내보낼 수 있다. 지원하는 형식은 CSV, Excel, HTML, JSON, HDF5, SAS, STATA, SQL 등이 있다.
이 글에서는 CSV를 위주로 다루겠다.
%%writefile
%%writefile 명령은 셀에서 서술한 내용을 텍스트 파일로 만든다.
%%writefile test.csv
c1, c2, c3
1, 1.11, one
2, 2.22, two
3, 3.33, three
# 실행 결과
Writing test.csv
CSV 파일 읽기
pandas.read_csv 함수를 사용하여 CSV 파일로부터 데이터를 읽어 들일 수 있다. 매개변수로 파일의 이름을 전달한다.
pd.read_csv('test.csv')
# 실행 결과
c1 c2 c3
0 1 1.11 one
1 2 2.22 two
2 3 3.33 three
read_csv는 기본적으로 파일의 첫번째 행을 header(열 인덱스)로 불러온다. 만약 데이터 파일에 열 인덱스 정보가 없는 경우에는 names 매개변수로 전달한다.
pd.read_csv('test2.csv', names=['c1','c2','c3'])
만약 테이블의 특정 열을 행 인덱스로 지정하고 싶을 때는 index_col 매개변수로 지정할 열을 전달한다.
pd.read_csv('test.csv', index_col='c1')
# 실행 결과
c2 c3
c1
1 1.11 one
2 2.22 two
3 3.33 three
구분자가 쉼표가 아니면 sep 매개변수로 지정할 수 있다. 구분자가 길이가 정해지지 않은 공백이라면 \s+ 정규식 문자열로 지정한다.
%%writefile sample2.txt
c1 c2 c3 c4
0.179181 -1.538472 1.347553 0.43381
1.024209 0.087307 -1.281997 0.49265
0.417899 -2.002308 0.255245 -1.10515
pd.read_table('sample2.txt', sep='\s+')
# 실행 결과
c1 c2 c3 c4
0 0.179181 -1.538472 1.347553 0.43381
1 1.024209 0.087307 -1.281997 0.49265
2 0.417899 -2.002308 0.255245 -1.10515
파일 중 읽지 않을 행은 skiprows 매개변수로 지정할 수 있다.
%%writefile sample3.txt
파일 제목: sample3.txt
데이터 포맷의 설명:
c1, c2, c3
1, 1.11, one
2, 2.22, two
3, 3.33, three
pd.read_table('sample3.txt', skiprows=[0, 1])
# 실행 결과
c1 c2 c3 c4
0 0.179181 -1.538472 1.347553 0.43381
1 1.024209 0.087307 -1.281997 0.49265
2 0.417899 -2.002308 0.255245 -1.10515
특정한 값을 NaN으로 취급할 때는 na_values 매개변수에 NaN으로 취급할 값을 전달한다.
%%writefile sample4.csv
c1, c2, c3
1, 1.11, one
2, , two
누락, 3.33, three
pd.read_csv('sample4.csv', na_values=['누락'])
# 실행 결과
c1 c2 c3
0 1.0 1.11 one
1 2.0 two
2 NaN 3.33 three
이 외에도 많이 사용하는 옵션은 아래와 같다.
옵션 | default | 설명 |
sep | ’,’ | 자료의 구분 기준을 설정 |
header | ‘infer’ | 첫행을 열이름으로 쓸 것인지 |
names | - | 열이름을 리스트로 입력해 줄 수있다. (header=None으로 자동 설정) |
index_col | None | 특정 열이름으로 인덱스를 지정 |
prefix | - | header가 없는 경우, ‘V’를 넣으면, V0,V1순으로 열이름 부여 |
dtype | - | 개별 열 또는 모든 열의 타입을 지정(e.g ‘str’, {‘a’: np.float64, ‘c’: ‘Int64’}) |
na_values | - | 결측값으로 인식할 문자열 지정 |
keep_default_na | True | 결측값(NaN)을 포함할지 여부 결정 |
na_filter | True | 결측값 탐지 |
skip_blank_lines | True | 빈줄은 결측값으로 판단하지 않고 건너뜀 |
encoding | - | 참고 |
nrow | - | 읽을 파일 행(row)의 수 |
read_csv 사용 시 읽어들일 파일을 URL로 지정하면 URL에 해당하는 파일을 다운로드하여 데이터를 읽을 수 있다.
df = pd.read_csv("https://raw.githubusercontent.com/datascienceschool/docker_rpython/master/data/titanic.csv")
CSV 파일 쓰기
DataFrame을 CSV로 쓰고 싶을 때는 to_csv 함수를 사용한다.
df = pd.read_csv('sample4.csv', na_values=['누락'])
df.to_csv('sample5.csv')
구분자를 쉼표가 아니라 다른 문자로 변경하고 싶을 때는 sep 매개변수를 사용한다.
df.to_csv('sample6.csv', sep='\t')
DataFrame을 파일로 쓸 때 NaN은 빈 값으로 들어가는데 na_rep 매개변수로 채울 값을 지정할 수 있다.
df.to_csv('sample7.csv', na_rep='누락')
인덱스, 헤더 출력 여부는 index, header 매개변수로 지정할 수 있다.
df.to_csv('sample8.csv', index=False, header=False)
참고 문서