데이터 입출력
Pandas는 데이터 파일을 읽어 데이터프레임으로 만들 수 있다. 다음처럼 여러 포맷을 지원한다.
- CSV
- EXCEL
- HTML
- JSON
- HDFS
- SAS
- STATA
- SQL
이중에서 가장 단순하지만 널리 사용되는 CSV(Comma Separated Values) 포맷 입출력에 대해 살펴보자.
%%writefile 명령
샘플 데이터로 사용할 CSV 파일을 %%writefile 매직 명령으로 만들어보자.
Overwriting sample1.csv
CSV 파일 입력
index | c1 | c2 | c3 |
---|---|---|---|
0 | 1 | 1.11 | one |
1 | 2 | 2.22 | two |
2 | 3 | 3.33 | three |
위에서 읽은 데이터에는 열 인덱스는 있지만 행 인덱스 정보가 없으므로 0부터 시작하는 정수 인덱스가 자동으로 추가되었다. 만야그 위의 경우와 달리 데이터 파일에 열 인덱스 정보가 없는 경우에는 read_csv
명령의 names
인수로 설정할 수 있다.
Writing sample2.csv
index | c1 | c2 | c3 |
---|---|---|---|
0 | 1 | 1.11 | one |
1 | 2 | 2.22 | two |
2 | 3 | 3.33 | three |
만약 테이블 내의 특정한 열을 행 인덱스로 저정하고 싶으면 index_col
인수를 사용한다.
c1 | c2 | c3 |
---|---|---|
1 | 1.11 | one |
2 | 2.22 | two |
3 | 3.33 | three |
확장자가 csv가 아닌 파일 즉, 데이터를 구분하는 구분자가 쉼표(Comma)가 아니면 sep
인수를 써서 구분자를 지정해준다. 예를들면 구분자의 길이가 정해지지 않은 공백인 경우 \s+
정규식 문자열을 사용할 수 있다.
Writing sample3.txt
index | 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
인수를 사용한다.
Writing sample4.txt
index | c1 | c2 | c3 |
---|---|---|---|
0 | 1 | 1.11 | one |
1 | 2 | 2.22 | two |
2 | 3 | 3.33 | three |
특정한 값을 NaN으로 취급하고 싶으면 na_values
인수에 NaN값으로 취급할 값을 넣는다.
Writing sample5.csv
index | c1 | c2 | c3 |
---|---|---|---|
0 | 1.0 | 1.11 | one |
1 | 2.0 | two | |
2 | NaN | 3.33 | three |
- names : 열인덱스명이 없는경우 지정 가능 (,names=[['c1', 'c2', 'c3']])
- sep : 데이터 구분자 지정 (,sep='\s+')
- skiprows : 행 건너뛰기 (,skiprows=[[0, 1]])
- na_values : 특정값을 NaN값으로 대체 (,na_values=[['누락']])
CSV 파일 출력
,c1, c2, c3
0,1.0, 1.11, one
1,2.0, , two
2,, 3.33, three
파일을 읽을때와 마찬가지로 출력할 때도 seq인수로 구분자를 바꿀 수 있다. 또 na_rep
인수로 NaN 표시값을 바꿀 수도 있다.
,c1, c2, c3
0,1.0, 1.11, one
1,2.0, , two
2,누락, 3.33, three
index
, header
인수를 지정하여 인덱스 및 해더 출력 여부를 저정하는 것도 가능하다.
index | c1 | c2 | c3 |
---|---|---|---|
a | 1.0 | 1.11 | one |
b | 2.0 | two | |
c | NaN | 3.33 | three |
출처 : 데이터사이언스 스쿨(datascienceschool.net)