Python/NumPy | Pandas

[Python] Pandas - 데이터 입출력(CSV)

비번변경 2022. 12. 15. 23:27

데이터 입출력

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)

 

 

참고 문서

데이터 사이언스 스쿨 - 4.2 데이터 입출력