IT/언어

[python] python으로 csv파일 쓰기 (list, numpy, pandas)

개발자 두더지 2022. 2. 21. 20:09
728x90

 이번 포스팅에서는 python으로 csv 파일을 쓰는 방법에 대해 설명하고자 한다. 그리고 데이터형이 list인지, numpy인지, pandas인지에 대해 어떻게 쓰면 좋을지에 대해 나눠서 살펴볼 예정이다.

 

list데이터의 쓰기


 데이터형이 list인 경우 쓰는 방법에 대해 알아보자. list를 csv로 작성하는 경우에는 csv이라는 라이브러이의 writer 오브젝트를 사용한다. 사용방법은 간단하며, 다음의 코드와 같다.

# 먼저 다음과 같이 writer 오브젝트를 선언한다.
write = csv.writer(출력파일경로/파일명.csv)

# 1차원 데이터의 쓰기
write.writerow(데이터)

# 2차원 데이터의 쓰기
write.writerows(데이터)

#그러나 아래와 같이 한 줄로 "쓰기"가 될 수 있다.
csv.writer(출력파일경로/파일명.csv).writerow(데이터)

 하나 하나 살펴보자.

1차원 list의 쓰기

import csv
f = open('out.csv', 'w')
data = ['가나다라','12345']
writer = csv.writer(f)
writer.writerow(data)
f.close()

 out.csv파일을 안을 살펴보면 다음과 같이 된다.

 1차원 list의 경우 특별히 주의점이 없으므로 이대로 코드를 작성하면 된다.

2차원 list의 쓰기

 다음은 2차원 list의 쓰기에 대한 내용이다. 먼저 다음의 코드를 실행해보자.

import csv
f = open('out2.csv', 'w')
data = [['가나다라','12345'],['마바사아','678910']]
writer = csv.writer(f)
writer.writerows(data)
f.close()

 출력하면 다음과 같이 불필요한 공백 행이 들어가게 된다. 이러한 불필요한 공백이 들어가는 상황을 방지하기 위해서는 파일을 open할 때 newline =''을 사용할 필요가 있다. 

 공백 행은 개행 코드의 처리 방식에 의해 입력되는 것이므로,  newline =''으로 개행 코드를 지정하여 그러한 공백행이 들어가는 것을 방지하게 된다.

import csv
f = open('out2.csv', 'w', newline='')
data = [['가나다라','12345'],['마바사아','678910']]
writer = csv.writer(f)
writer.writerows(data)
f.close()

 이 코드로 실행해보면 실제로 공백행이 사라진 것을 확인할 수 있을 것이다.

 

 

numpy데이터의 쓰기


 다음은 numpy 데이터를 csv 파일화할 때 쓰는 방법에 대해서 설명하고자 한다. numpy를 csv에 "쓰기"할 경우에는 텍스트의 "쓰기" 방법과 동일하게 "savetxt"를 사용한다. 그러나, csv는 "콤마(,)"로 구분되므로, 구분 문자로 "콤마(,)"를 지정할 필요가 있다. 구분 문자를 지정하기 위해서는 "delimiter"을 사용한다.

 그럼 실제 코드를 살펴보자.

import numpy as np
data = np.arange(9).reshape(3,3)
np.savetxt("outnp.csv", data, delimiter=",")

 위 코드를 적용하면, 아래의 이미지와 같이 csv 파일 형식으로 저장할 수 있다. 

그러나 디폴트로 문자 코드가 "%.18e"으로 되어 있어, 신경 쓰이는 경우 아래와 같이 fmt를 사용하여 포맷을 지정할 수 있다.

#정수의 경우
np.savetxt("outnp.csv", data, delimiter=",", fmt="%d")
#실수(소수점 이하 다섯자리 수까지)
np.savetxt("outnp.csv", data, delimiter=",", fmt="%.5f")

 

 

pandas데이터의 쓰기


 마지막으로 데이터형이 pandas인 경우에 어떻게 csv 파일로 출력하는지를 살펴보자. pandas로 만든 데이터 프레임을 csv로 만들기 위해서는 "to_csv"이라는 csv로 작성할 수 있는 전용 메소드가 기본적으로 존재한다. 이것을 사용하면 된다.

 사용방법은 이것 또한 간단하며 "df.to_csv(파일명)" 의 형식으로 작성하면 된다. 

import pandas as pd
df = pd.DataFrame({"이름":["철수", "미혜", "영희"],
                   "키":[169, 175, 160],
                   "성적":[90, 70, 85]})
df = df.set_index('이름')
df.to_csv("output_pd.csv")

 문자가 깨지는 경우 to_csv에서 encoding을 지정하면 된다. 예를 들면, 일본어의 경우 encoding=”shift_jis”으로 지정하면 일본어가 깨지지 않는다.

df.to_csv("output_pd.csv", encoding="shift_jis")

참고자료

https://work-life-enj.com/pyhon-write-csv/

728x90