본문 바로가기

개발

[python] pandas csv 분할 중 .0 .1 문제

문제 상황

  1. python pandas를 사용해, csv를 일정 라인씩 분할하는 과정에서 일부 데이터 끝에 .0, .1이 붙음
  2. python 3.10
  3. pandas 2.2.2

문제 배경

  1. oracle DB로 데이터를 이관해야 함
  2. 보안 정책 문제로 DB dump를 못해 데이터를 csv로 넣어줘야 했음
  3. 이마저도 큰 csv를 올리면 컴퓨터가 터져서 분할해야 했음

문제의 파이썬 코드

# CSV 파일 읽기
df = pd.read_csv('파일명.csv')

# 전체 row 수
total_rows = len(df)

# 500만 row씩 파일로 저장
chunk_size = 5000000

for i in range(0, total_rows, chunk_size):
    chunk_df = df.iloc[i:i + chunk_size]
    file_name = f'chunk_{i // chunk_size}.csv'
    chunk_df.to_csv(file_name, index=False)
    print(f'생성된 파일: {file_name}')

해결 방법

linux의 split 명령어로 해결

만약, a.csv 파일을 1000 라인씩 분할하고 싶다면 다음과 같이 입력

split -l 1000 a.csv

마치면서

csv row split 중심으로 검색했지만, 유료 툴 소개나 파이썬 얘기밖에 없어서 답답했다.

팀장님이 슥 보시고 바로 해결해 주셨지만, 너무 쉽게 해결돼서 그런지 현타가 좀 심하게 왔다.

이관할 DB에서 문자열 범위를 타이트하게 지정해놔서 다행이지, 그게 아니었으면 서비스 시작하고 발견돼 사람 여럿 피곤해질 뻔했다.

계속 파이썬 관련 스택에서 어이없는 상황들을 마주하니, 파이썬으로 문자열 처리할 땐 좀 꼼꼼하게 봐야겠다.