Python으로 CSV 파일의 쉼표 소수점 데이터 처리하기: 초보자도 쉽게 이해하는 가이드

Python으로 CSV 파일 데이터를 처리하는 모습을 나타내는 코드 스크린샷
< 쉼표 소수점 데이터가 포함된 CSV 파일 >

CSV 파일은 데이터를 저장하고 공유하는 데 널리 사용되는 형식입니다. 하지만 CSV 파일에서 소수점이 쉼표(,)로 표현된 데이터를 처리할 때, 특히 Python과 R 간의 호환성 문제를 해결하려면 몇 가지 주의할 점이 있습니다. 이번 글에서는 Python으로 쉼표 소수점 데이터를 파싱하는 방법을 초보자도 이해할 수 있도록 단계별로 설명하고, R과의 호환성 문제를 해결하는 팁을 공유하겠습니다. pandascsv 모듈을 활용한 실용적인 예제도 포함합니다.


1. 쉼표 소수점 데이터란?

일부 국가(특히 유럽)에서는 소수점을 점(.) 대신 쉼표(,)로 표기합니다. 예를 들어, 3.14는 3,14로 작성됩니다. 이런 CSV 파일을 Python으로 읽을 때, 쉼표를 올바르게 소수점으로 변환하지 않으면 데이터가 문자열로 처리되거나 에러가 발생할 수 있습니다. 특히 R로 데이터를 내보낼 때, R은 기본적으로 점(.)을 소수점으로 인식하므로 호환성 문제가 발생할 수 있습니다.

흔히 발생하는 문제

  • Python에서 쉼표 소수점 데이터가 문자열로 읽힘 (예: "3,14" → 숫자 3.14로 변환 필요)
  • R로 내보낸 CSV 파일에서 소수점 형식이 맞지 않아 분석 오류 발생
  • CSV 파일의 지역별 설정(로케일) 차이로 인한 파싱 오류

이제 Python에서 이 문제를 해결하는 방법을 알아보겠습니다.


2. Python으로 쉼표 소수점 데이터 파싱하기

Python에서는 pandascsv 모듈을 사용해 쉼표 소수점 데이터를 쉽게 처리할 수 있습니다. 두 가지 접근법을 단계별로 살펴보겠습니다.

pandas로 CSV 파일을 읽는 코드와 출력 결과를 보여주는 스크린샷
< 쉼표 소수점 CSV 데이터를 읽는 DataFrame >

방법 1: pandas로 CSV 파일 읽기

pandas는 데이터 분석에 최적화된 라이브러리로, 쉼표 소수점 데이터를 처리할 때 매우 편리합니다. decimal 매개변수를 사용하면 소수점 기호를 지정할 수 있습니다.

예제 코드

import pandas as pd

# 쉼표 소수점 데이터가 포함된 CSV 파일 읽기
df = pd.read_csv('data.csv', decimal=',', thousands='.')

# 데이터 확인
print(df)
  • decimal=',': CSV 파일에서 쉼표(,)를 소수점으로 인식
  • thousands='.': 점(.)을 천 단위 구분 기호로 인식 (필요 시 사용)
  • data.csv 예시:
name,score
Alice,3,14
Bob,4,75

결과

    name  score
0  Alice   3.14
1    Bob   4.75

pandas는 쉼표 소수점을 자동으로 숫자(float)로 변환해줍니다.

추가 팁: 열 지정

특정 열만 쉼표 소수점으로 처리하고 싶다면, convertersdtype을 사용할 수 있습니다.

df = pd.read_csv('data.csv', converters={'score': lambda x: float(x.replace(',', '.'))})

방법 2: csv 모듈로 직접 파싱하기

pandas 없이 기본 csv 모듈을 사용해 데이터를 읽고 쉼표를 소수점으로 변환할 수도 있습니다. 이 방법은 더 많은 제어가 필요하지만, 가벼운 작업에 적합합니다.

예제 코드

import csv

# CSV 파일 읽기
with open('data.csv', newline='') as file:
    reader = csv.DictReader(file)
    data = []
    for row in reader:
        # 쉼표를 점으로 변환
        row['score'] = float(row['score'].replace(',', '.'))
        data.append(row)

# 결과 확인
for row in data:
    print(row)

결과

{'name': 'Alice', 'score': 3.14}
{'name': 'Bob', 'score': 4.75}

이 방법은 CSV 파일의 구조를 세밀히 조정할 때 유용합니다.


3. R과의 호환성 문제 해결하기

Python에서 처리한 데이터를 R로 내보낼 때, 소수점 형식이 맞지 않으면 R에서 데이터를 잘못 해석할 수 있습니다. 이를 해결하는 방법을 알아봅시다.

문제: R의 소수점 인식

R은 기본적으로 점(.)을 소수점으로 인식합니다. 따라서 Python에서 쉼표 소수점 데이터를 처리한 뒤, CSV 파일로 저장할 때 점(.) 형식으로 저장해야 합니다.

해결법 1: CSV 파일 저장 시 소수점 형식 지정

pandas의 to_csv 메서드에서 decimal='.'을 명시적으로 지정합니다.

# 데이터프레임을 CSV로 저장
df.to_csv('output.csv', decimal='.', index=False)

저장된 output.csv:

name,score
Alice,3.14
Bob,4.75

이 파일은 R에서 문제없이 읽힙니다.

해결법 2: R에서 로케일 설정

만약 CSV 파일이 이미 쉼표 소수점 형식으로 저장되어 있다면, R에서 로케일을 설정해 데이터를 읽을 수 있습니다.

# R 코드
data  read.csv("data.csv", dec=",")
  • dec=",": 쉼표를 소수점으로 인식
  • 이 방법은 Python에서 데이터를 수정하지 않고 R에서 처리할 때 유용합니다.

4. 실무에서 유용한 팁

1) 데이터 검증

CSV 파일을 읽기 전에 데이터를 검증하세요. 예를 들어, 쉼표 소수점이 모든 행에서 일관되게 사용되었는지 확인합니다.

def check_decimal(data, column):
    for value in data[column]:
        if ',' not in value:
            print(f"Warning: {value} does not contain a comma")

2) 에러 처리

쉼표 소수점 형식이 잘못된 경우를 대비해 예외 처리를 추가하세요.

try:
    df['score'] = df['score'].str.replace(',', '.').astype(float)
except ValueError as e:
    print(f"Error converting data: {e}")

3) 대량 데이터 처리

대량의 CSV 파일을 처리할 때는 pandas의 chunksize를 활용해 메모리 사용량을 줄일 수 있습니다.

for chunk in pd.read_csv('large_data.csv', decimal=',', chunksize=1000):
    # 각 청크 처리
    process_chunk(chunk)


5. Stack Overflow에서 자주 묻는 질문

Stack Overflow에서 쉼표 소수점 데이터와 관련된 질문은 자주 등장합니다. 대표적인 질문과 답변을 정리했습니다.

  • 질문: Python에서 쉼표 소수점 CSV를 읽을 때 "could not convert string to float" 에러가 발생합니다.
    • 답변: pandas.read_csvdecimal=','를 추가하거나, 문자열을 점(.)으로 변환하세요.
  • 질문: R에서 Python으로 생성한 CSV 파일을 읽을 때 소수점이 잘못 인식됩니다.
    • 답변: Python에서 CSV를 저장할 때 decimal='.'을 사용하거나, R에서 read.csv(..., dec=',')를 설정하세요.

6. 결론

Python으로 쉼표 소수점 데이터를 처리하는 것은 pandascsv 모듈을 사용하면 간단합니다. 특히 pandas의 decimal 매개변수는 초보자도 쉽게 사용할 수 있는 강력한 도구입니다. R과의 호환성을 위해 CSV 파일을 저장할 때 소수점 형식을 점(.)으로 유지하거나, R에서 로케일을 설정하는 것이 중요합니다.


© 2025 Your Website. All rights reserved.