Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 CSV 파일 다루기: 읽기와 쓰기 완벽 가이드

CSV(Comma Separated Values, 쉼표로 구분된 값) 파일은 플랫폼 간에 데이터를 저장하고 공유할 때 가장 널리 사용되는 플랫 파일 형식 중 하나입니다. 각 열은 쉼표로 구분되며, 선택적으로 첫 번째 행에 헤더를 두어 각 열의 이름을 표시할 수도 있습니다.

Python은 여러 모듈을 통해 CSV 파일을 손쉽게 다룰 수 있습니다. 이 글에서는 기본 내장 라이브러리인 csv 모듈과 강력한 데이터 분석 라이브러리인 pandas를 활용해 CSV 파일을 읽고 쓰는 방법을 예제와 함께 자세히 살펴보겠습니다.

csv 모듈로 CSV 파일 읽기

Python의 내장 csv 모듈은 별도의 설치 없이 바로 사용할 수 있습니다. open() 함수로 파일을 연 뒤, csv.reader() 객체를 생성하면 파일의 각 행을 리스트 형태로 순차적으로 읽어올 수 있습니다.

예제

import csv
with open('C:\\iris.csv','rt') as file:
csv_rows = csv.reader(file)
for row in csv_rows:
print(row)

실행 결과

위 코드를 실행하면 파일의 각 행이 문자열 리스트로 출력됩니다.

['sepal.length', 'sepal.width', 'petal.length', 'petal.width', 'variety']
['5.1', '3.5', '1.4', '.2', 'Setosa']
['4.9', '3', '1.4', '.2', 'Setosa']
['4.7', '3.2', '1.3', '.2', 'Setosa']
['4.6', '3.1', '1.5', '.2', 'Setosa']
['5', '3.6', '1.4', '.2', 'Setosa']
['5.4', '3.9', '1.7', '.4', 'Setosa']
['4.6', '3.4', '1.4', '.3', 'Setosa']
……………
……………

pandas로 CSV 파일 읽기

pandas 라이브러리 역시 CSV 파일을 읽는 데 매우 유용합니다. read_csv() 메서드에 파일 경로와 파일명만 전달하면 곧바로 데이터셋(DataFrame)으로 불러올 수 있습니다. 파일을 읽은 후에는 필요에 따라 데이터셋의 크기 확인, 특정 행 출력 등 다양한 작업을 간편하게 수행할 수 있습니다.

예제

import pandas as pd
datainput = pd.read_csv('C:\\iris.csv')
print("Given dataset values : \n", datainput)
# 데이터셋 크기 확인
print("\nThe size of the dataset is :\n", datainput.shape)
# 데이터셋의 일부 행 출력
print("\n printing few rows from the dataset :\n", datainput[0:6])

실행 결과

위 코드를 실행하면 전체 데이터셋, 데이터셋의 크기(shape), 그리고 앞부분 행들이 순서대로 출력됩니다.

Given dataset values :
sepal.length sepal.width petal.length petal.width variety
0 5.1 3.5 1.4 0.2 Setosa
1 4.9 3.0 1.4 0.2 Setosa
2 4.7 3.2 1.3 0.2 Setosa
3 4.6 3.1 1.5 0.2 Setosa
4 5.0 3.6 1.4 0.2 Setosa
.. ... ... ... ... ...
145 6.7 3.0 5.2 2.3 Virginica
146 6.3 2.5 5.0 1.9 Virginica
147 6.5 3.0 5.2 2.0 Virginica
148 6.2 3.4 5.4 2.3 Virginica
149 5.9 3.0 5.1 1.8 Virginica
[150 rows x 5 columns]
The size of the dataset is :
(150, 5)
printing few rows from the dataset :
sepal.length sepal.width petal.length petal.width variety
0 5.1 3.5 1.4 0.2 Setosa
1 4.9 3.0 1.4 0.2 Setosa
2 4.7 3.2 1.3 0.2 Setosa
3 4.6 3.1 1.5 0.2 Setosa
4 5.0 3.6 1.4 0.2 Setosa
5 5.4 3.9 1.7 0.4 Setosa

csv 모듈로 CSV 파일 쓰기

CSV 파일을 새로 만들 때는 Python 리스트를 활용합니다. 각 행을 하나의 리스트로 선언하고, 모든 행을 하나의 큰 리스트에 담아 데이터셋을 구성합니다. 헤더 행 역시 별도의 리스트로 준비합니다. 그런 다음 writerow(), writerows(), csv.writer 같은 메서드를 사용해 최종적으로 파일을 로컬 시스템에 저장합니다.

예제

import csv
data = ["Month", "1958", "1959", "1960"]
x = [
["JAN", 340, 360, 417],
["FEB", 318, 342, 391],
["MAR", 362, 406, 419],
["APR", 348, 396, 461],
["MAY", 363, 420, 472],
["JUN", 435, 472, 535],
["JUL", 491, 548, 622],
["AUG", 505, 559, 606],
["SEP", 404, 463, 508],
["OCT", 359, 407, 461],
["NOV", 310, 362, 390],
["DEC", 337, 405, 432],
]
y = "C:\\years.csv"
with open(y, 'w') as work:
z = csv.writer(work)
z.writerow(data) # 헤더 행 작성
z.writerows(x) # 데이터 행 작성

실행 결과

위 코드를 실행하면 지정한 경로에 다음과 같은 CSV 파일이 생성됩니다.

Month,1958,1959,1960
JAN,340,360,417
FEB,318,342,391
MAR,362,406,419
APR,348,396,461
MAY,363,420,472
JUN,435,472,535
JUL,491,548,622
AUG,505,559,606
SEP,404,463,508
OCT,359,407,461
NOV,310,362,390
DEC,337,405,432

pandas로 CSV 파일 쓰기

pandas를 사용할 때는 행 데이터와 헤더(열 이름)를 모두 포함하는 DataFrame을 먼저 생성합니다. 그다음 to_csv() 메서드에 저장할 파일명과 경로를 파라미터로 전달하면 DataFrame의 데이터가 CSV 파일로 저장됩니다. index=None 옵션을 지정하면 인덱스 번호는 파일에 포함되지 않습니다.

예제

from pandas import DataFrame
C = {'Month': ['JAN','FEB', 'MAR'],
'1958': ['345', '435', '545'],
'1959': ['377', '135', '985'],
'1960': ['498', '354', '765'],
}
df = DataFrame(C, columns= ["Month", "1958", "1959", "1960"])
export_csv = df.to_csv(r'C:\\years_p.csv', index = None, header=True) # 결과 파일이 저장될 경로를 지정합니다.
print(df)

실행 결과

위 코드를 실행하면 지정한 경로에 CSV 파일이 저장되고, 콘솔에는 다음과 같이 DataFrame이 출력됩니다.

    Month 1958 1959 1960
0 JAN 345 377 498
1 FEB 435 135 354
2 MAR 545 985 765

마무리

지금까지 Python에서 CSV 파일을 읽고 쓰는 두 가지 대표적인 방법을 살펴보았습니다. 간단한 파일 입출력에는 내장 csv 모듈이 적합하고, 데이터 분석이나 대용량 데이터 처리에는 pandas가 훨씬 편리합니다. 두 방식의 특징을 잘 이해하고 상황에 맞게 활용하면 데이터 처리 작업의 효율을 크게 높일 수 있습니다.