본문 바로가기

csv

같은 표를 저장했는데 파일 크기가 다릅니다, 줄 끝에 숨은 1바이트 같은 데이터를 두 사람이 각자 CSV로 저장해 비교해 보면 크기가 미묘하게 다를 때가 있습니다. 내용은 글자 하나까지 같은데 바이트 수가 안 맞습니다.범인은 눈에 보이지 않는 자리, 줄이 끝나는 지점입니다. 줄바꿈을 표시하는 방식이 운영체제마다 달라서, 줄 하나마다 1바이트씩 차이가 쌓입니다. 같은 내용을 방식만 바꿔 저장하고 바이트를 직접 읽어 확인했습니다. 줄바꿈이 두 종류가 된 이유타자기 시절에는 종이를 한 줄 올리는 동작과 활자 위치를 맨 왼쪽으로 되돌리는 동작이 따로 있었습니다. 초기 컴퓨터는 이 두 동작을 그대로 문자로 만들었습니다. CR(맨 앞으로 되돌리기, 0D)과 LF(한 줄 내리기, 0A)입니다.이후 진영이 갈렸습니다. 윈도우는 두 개를 다 쓰고, 맥과 리눅스는 LF 하나만 씁니다... 더보기
커진 CSV를 gzip으로 압축하기, 얼마나 줄고 압축한 채로 바로 읽을 수 있을까? 로그나 내역 데이터를 CSV로 쌓다 보면 파일이 수십 메가바이트까지 불어납니다.텍스트라 압축이 잘 먹는데, 그렇다고 매번 압축을 풀었다 다시 읽자니 번거롭습니다. 그래서 두 가지가 궁금해집니다. gzip으로 묶으면 얼마나 줄고, 압축을 풀지 않은 채로 바로 읽을 수는 없을까? 테스트 했습니다. 결론부터 말하면 CSV는 gzip으로 4배 넘게 줄고,압축을 풀지 않고도 그대로 읽을 수 있습니다.실제 데이터로 확인해 보겠습니다. 20만 행 CSV로 압축률을 재 봤습니다도시, 상태, 금액처럼 반복되는 값이 섞인 20만 행짜리 CSV를 만들어일반 저장과 gzip 저장을 나란히 비교했습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, pandas입니다.저장 방식용량원본 대비일반 CSV (.csv)7.5 MB.. 더보기
CSV를 열었더니 주소 뒷부분이 옆 칸으로, 값 속 쉼표 때문에 열이 밀리는 문제 이름과 주소가 잘 정리돼 있던 CSV를 프로그램으로 읽었더니,주소 한 칸이 두 칸으로 쪼개지면서 그 뒤 금액까지 줄줄이 옆으로 밀려 버리는 경우가 있습니다.데이터는 멀쩡한데 표만 어긋난 것처럼 보입니다. 범인은 대개 값 안에 들어간 쉼표입니다. CSV는 쉼표로 칸을 나누는 형식이라,주소나 회사명처럼 값 자체에 쉼표가 들어 있으면그 지점에서 칸이 하나 더 생겨 버립니다. 실제로 재현하고 바로잡아 보겠습니다. 이런 데이터에서 문제가 생깁니다id, name, address, amount 네 칸짜리 CSV를 예로 들겠습니다.그런데 주소 값 안에 상세 번지를 쉼표로 붙여 놓았습니다.id,name,address,amount1,김민수,서울시 강남구 역삼동, 123-4,500002,이서연,부산시 해운대구 우동, 5-6.. 더보기
수백만 행 CSV를 pandas로 읽는 게 느릴 때, 읽기 속도를 끌어올리는 방법 수십 메가바이트가 넘는 CSV를 pd.read_csv로 불러올 때마다몇 초씩 기다리게 되면, 분석을 반복할수록 그 시간이 쌓입니다. 그런데 같은 파일이라도 읽는 방법을 조금만 바꾸면 훨씬 빨라집니다.무엇을 바꾸면 얼마나 빨라지는지 실제로 재 봤습니다.100만 행 CSV로 방법을 비교했습니다id, 도시, 금액 등 6개 열에 100만 행,약 40MB짜리 CSV를 만들어 네 가지 방법으로 읽어 시간을 쟀습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, pandas와 pyarrow입니다.각 방법을 여러 번 실행해 가장 빠른 값을 적었습니다.읽는 방법시간기본 대비기본 read_csv1.01초기준dtype 지정0.85초1.2배 빠름usecols로 필요한 3열만0.71초1.4배 빠름engine="pyarrow.. 더보기
CSV를 UTF-8로 저장하는 법, 엑셀과 메모장과 파이썬에서 각각 컨버팅해서 읽는 방법 동료에게 받은 CSV를 웹 업로드 양식에 올렸더니 "UTF-8로 저장해서 다시 올려 주세요"라는 안내가 떴습니다. 분명 엑셀에서 멀쩡히 열리던 파일인데, 시스템이 요구하는 인코딩이 따로 있는 상황입니다.이럴 때 필요한 건 한 가지입니다. 파일을 UTF-8로 다시 저장하는 것. 도구마다 방법이 조금씩 다르고, 같은 UTF-8이라도 두 종류가 있어 헷갈리기 쉽습니다. 메모장, 엑셀, 파이썬 순으로 가장 빠른 길을 정리하고, 두 종류의 UTF-8 차이를 실제 바이트로 확인해 보겠습니다. 먼저 알아둘 것: UTF-8은 사실 두 종류입니다저장 옵션에서 흔히 보이는 이름이 UTF-8과 UTF-8 (BOM 포함)입니다. 둘의 실제 내용은 거의 같고, 차이는 파일 맨 앞에 붙는 3바이트짜리 표식 하나뿐입니다. 이 표식.. 더보기