본문 바로가기

데이터19

행이 100만 개를 넘는 CSV는 엑셀 시트 한 장에 다 안 들어갑니다 시스템에서 1년치 거래 내역을 CSV로 내려받았습니다. 파일은 17메가바이트 남짓이고, 더블클릭하면 엑셀이 뜨긴 뜹니다. 그런데 맨 아래로 내려가 보면 마지막 날짜가 12월이 아닙니다.엑셀이 고장 난 것이 아니라 시트 한 장이 담을 수 있는 행이 1,048,576개로 정해져 있기 때문입니다. 그 선을 넘긴 CSV를 만들어 어디까지 들어오고 무엇이 남는지 직접 재 봤습니다.제한은 CSV가 아니라 시트 쪽에 있습니다먼저 짚어 둘 것이 있습니다. CSV는 줄바꿈으로 행을 구분하는 순수한 텍스트 파일이라 줄 수에 상한이 없습니다. 1,100,000행짜리 파일을 만들어 세어 보니 정확히 1,100,000행이 들어 있었습니다.다루는 방법담기는 행걸린 시간결과CSV 파일에 담긴 원본1,100,000242 ms줄 수 .. 2026. 9. 23.
시트가 5장인 엑셀을 CSV로 저장했더니 4장이 사라졌습니다 매출, 비용, 재고, 거래처, 요약. 다섯 장으로 나눠 정리한 장부를 CSV로 달라는 요청을 받고 다른 이름으로 저장을 눌렀습니다. 나중에 열어 보니 시트 하나 분량밖에 없습니다.CSV는 표 한 장을 담는 형식이라 시트라는 개념 자체가 없습니다. 저장 버튼을 눌렀을 때 실제로 무엇이 남고 무엇이 없어지는지, 시트 5장짜리 파일을 만들어 그대로 재현해 봤습니다.남는 것은 화면에 열려 있던 시트 한 장입니다다섯 장에 각각 다른 양의 자료를 넣고, 요약 시트를 화면에 띄운 상태에서 CSV로 저장했습니다. 결과 파일은 6행이었습니다. 요약 시트의 행 수 그대로입니다.시트행 수따로 뽑은 CSV엑셀 CSV 저장에 남았나매출1216,148 B사라짐비용814,115 B사라짐재고20110,224 B사라짐거래처462,47.. 2026. 9. 18.
맥에서 받은 파일 이름이 ㅎㅏㄴㄱㅡㄹ 처럼 벌어져 보일 때 동료가 맥에서 압축해 보낸 자료를 윈도우에서 풀었더니, 파일 이름의 자음과 모음이 ㅂㅗㄱㅗㅅㅓ.txt처럼 하나씩 떨어져 보인 적이 있으실 겁니다. 파일을 열면 내용은 멀쩡한데 이름만 이상합니다.같은 폴더에 이름이 똑같아 보이는 파일이 두 개 생기기도 합니다. 하나를 지우면 다른 하나가 남고, 검색창에 이름을 쳐도 안 잡힙니다. 왜 이런 일이 생기는지 바이트를 직접 꺼내 확인했습니다. 이름이 깨진 게 아니라 쪼개져 있습니다한글 한 글자를 컴퓨터에 담는 방법은 두 가지입니다. 하나는 완성된 글자 그대로 담는 방식이고, 다른 하나는 초성, 중성, 종성을 따로 담아 두었다가 화면에 그릴 때 합쳐 보여 주는 방식입니다. 앞의 것을 NFC, 뒤의 것을 NFD라고 부릅니다.'한' 한 글자를 두 방식으로 각각 저장해 .. 2026. 9. 9.
큰 CSV를 엑셀 대신 SQL로 다루기, SQLite에 불러와 조회하는 방법 수천 행짜리 CSV에서 도시별 매출 합계나 특정 조건의 주문만 뽑아내려면, 엑셀에서는 피벗 테이블과 필터를 여러 번 거쳐야 합니다. 이럴 때 CSV를 SQLite라는 가벼운 데이터베이스에 한 번 넣어 두면, SQL 한 줄로 원하는 집계를 바로 꺼낼 수 있습니다.SQLite는 서버를 따로 설치할 필요 없이 파일 하나로 동작하는 데이터베이스입니다. 파이썬에는 기본으로 들어 있어 별도 설치도 필요 없습니다. CSV를 넣고 조회하는 과정을 실제 데이터로 해 보겠습니다. 다룰 CSV주문 내역을 담은 간단한 CSV를 예로 씁니다.실제로는 수천, 수만 행이어도 방법은 같습니다.order_id,city,product,amount1,서울,키보드,320002,부산,마우스,180003,서울,모니터,210000... (.. 2026. 7. 25.
커진 CSV를 gzip으로 압축하기, 얼마나 줄고 압축한 채로 바로 읽을 수 있을까? 로그나 내역 데이터를 CSV로 쌓다 보면 파일이 수십 메가바이트까지 불어납니다.텍스트라 압축이 잘 먹는데, 그렇다고 매번 압축을 풀었다 다시 읽자니 번거롭습니다. 그래서 두 가지가 궁금해집니다. gzip으로 묶으면 얼마나 줄고, 압축을 풀지 않은 채로 바로 읽을 수는 없을까? 테스트 했습니다. 결론부터 말하면 CSV는 gzip으로 4배 넘게 줄고,압축을 풀지 않고도 그대로 읽을 수 있습니다.실제 데이터로 확인해 보겠습니다. 20만 행 CSV로 압축률을 재 봤습니다도시, 상태, 금액처럼 반복되는 값이 섞인 20만 행짜리 CSV를 만들어일반 저장과 gzip 저장을 나란히 비교했습니다. 측정 환경은 윈도우 11, 파이썬 3.14.3, pandas입니다.저장 방식용량원본 대비일반 CSV (.csv)7.5 MB.. 2026. 7. 24.
중첩된 JSON을 엑셀에서 열리는 CSV로, 배열까지 한 줄씩 펼쳐 변환하기 API에서 받아 온 JSON을 엑셀로 열어 보려고 CSV로 바꿨더니,한 칸 안에 {'name': '김민수', 'grade': 'gold'} 같은 덩어리가통째로 들어가 버린 적이 있습니다. 표로 정리하려던 데이터가 오히려 더 읽기 어려워집니다. 원인은 JSON이 값 안에 또 다른 값을 품는 중첩 구조를 갖는 반면,CSV는 행과 열이 반듯한 평평한 표만 담을 수 있다는 데 있습니다.그래서 변환하려면 중첩을 먼저 펼쳐 줘야 합니다.실제 데이터로 단계별로 해 보겠습니다.다룰 데이터부터 보겠습니다주문 정보를 담은 JSON입니다.고객 정보는 객체 안에 들어 있고(customer),주문 항목은 여러 개라 배열로 묶여 있습니다(items). 실무에서 흔히 만나는 모양입니다.[ { "order_id": 1001,.. 2026. 7. 22.
Parquet 저장할 때 compression만 바꿨을 뿐인데 용량이 갈립니다, 코덱 3종 실측 비교 데이터를 Parquet로 저장하다 보면 compression 옵션에 snappy, gzip, zstd 같은 낯선 이름이 등장합니다.아무거나 골라도 열리기는 하니 대충 넘기기 쉽지만,이 한 줄이 파일 크기와 저장 속도를 꽤 크게 바꿔 놓습니다. 그래서 같은 데이터를 코덱만 바꿔 가며 실제로 저장해 크기와 시간을 재 봤습니다.결론부터 말하면 무조건 가장 작은 코덱이 정답은 아니었습니다. 30만 행을 코덱 네 가지로 저장해 봤습니다회원 명단 형태의 표 데이터 30만 행(컬럼 9개: id, name, age, city, category, status, amount, score, joined)을 만들고,같은 데이터를 코덱만 바꿔 저장했습니다.측정 환경은 윈도우 11, 파이썬 3.14.3, pandas와 pyarr.. 2026. 7. 21.
CSV를 열었더니 주소 뒷부분이 옆 칸으로, 값 속 쉼표 때문에 열이 밀리는 문제 이름과 주소가 잘 정리돼 있던 CSV를 프로그램으로 읽었더니,주소 한 칸이 두 칸으로 쪼개지면서 그 뒤 금액까지 줄줄이 옆으로 밀려 버리는 경우가 있습니다.데이터는 멀쩡한데 표만 어긋난 것처럼 보입니다. 범인은 대개 값 안에 들어간 쉼표입니다. CSV는 쉼표로 칸을 나누는 형식이라,주소나 회사명처럼 값 자체에 쉼표가 들어 있으면그 지점에서 칸이 하나 더 생겨 버립니다. 실제로 재현하고 바로잡아 보겠습니다. 이런 데이터에서 문제가 생깁니다id, name, address, amount 네 칸짜리 CSV를 예로 들겠습니다.그런데 주소 값 안에 상세 번지를 쉼표로 붙여 놓았습니다.id,name,address,amount1,김민수,서울시 강남구 역삼동, 123-4,500002,이서연,부산시 해운대구 우동, 5-6.. 2026. 7. 20.
수백만 행 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.. 2026. 7. 19.
XML로 받은 데이터를 JSON으로 바꾸고 싶을 때, 표준 라이브러리만으로 해결하기 API나 설정 파일을 XML로 받았는데, 쓰려는 라이브러리나 프런트엔드는 JSON만 받는 상황을 만나신 적이 있을 것입니다. 둘 다 데이터를 담는 형식인데 모양이 달라서, 어떻게 옮겨야 깔끔한지 막연하게 느껴집니다.변환 자체는 파이썬 표준 라이브러리만으로 충분히 됩니다. 다만 XML에는 JSON에 없는 개념이 두 가지 있어서, 그 부분을 어떻게 처리하느냐가 결과 품질을 가릅니다. 한글이 섞인 실제 XML을 직접 변환해 가며 짚어 보겠습니다. 먼저 알아야 할 두 가지 걸림돌XML과 JSON은 닮았지만 다음 두 지점에서 1대1로 떨어지지 않습니다. 이 둘만 정리하면 나머지는 단순 매핑입니다.XML의 개념JSON에는?이 글의 처리 방식속성 (attribute), 예: id="b1"없음키 앞에 @를 붙여 보존속.. 2026. 7. 13.
앱이 만든 .db 파일, 안에 든 데이터를 들여다보는 단계별 방법 스마트폰 앱이나 프로그램 폴더를 뒤지다 보면 확장자가 .db인 파일이 종종 나옵니다. 메모장으로 열면 알아볼 수 없는 글자가 잔뜩 보이고, 정작 안에 어떤 기록이 들어 있는지는 보이지 않습니다.이런 .db는 대부분 SQLite라는 작은 데이터베이스 파일입니다. 표 형태의 데이터가 여러 개 담겨 있어서, 메모장 같은 텍스트 편집기로는 제대로 읽히지 않습니다. 안을 들여다보려면 표를 꺼내 주는 도구가 필요합니다. 코드 없이 클릭으로 여는 방법과, 파이썬으로 직접 꺼내는 방법을 차례로 정리하겠습니다.들여다본다는 건 결국 세 가지를 본다는 뜻입니다.db 안을 본다고 할 때 실제로 확인하게 되는 것은 보통 다음 셋입니다. 이 순서대로 보면 처음 보는 파일도 구조가 잡힙니다.보는 것무엇을 알 수 있나테이블 목록이 .. 2026. 7. 11.
Parquet 파일 받았는데 더블클릭해도 안 열립니다, 파이썬과 비전공자용 방법까지 데이터 분석을 하는 동료에게 자료를 받았더니 확장자가 .parquet인 파일이 와 있습니다. 평소처럼 더블클릭했는데 열리는 프로그램이 없거나, 메모장으로 억지로 열면 깨진 기호만 잔뜩 나옵니다.파일이 망가진 것이 아닙니다. Parquet는 사람이 눈으로 읽으라고 만든 형식이 아니라, 프로그램이 빠르게 읽도록 압축해 둔 데이터 파일입니다. 그래서 여는 방법이 따로 있습니다. 코드로 여는 법과, 코딩을 모르는 분을 위한 방법을 차례로 보여 드리겠습니다. 왜 메모장으로는 안 보일까먼저 이 점부터 짚고 가면 나머지가 쉬워집니다. CSV는 글자를 그대로 적어 둔 텍스트 파일이라 메모장으로도 읽힙니다. Parquet는 다릅니다. 값을 열(컬럼) 단위로 모아 압축하고, 맨 앞과 맨 뒤에 표식을 붙인 바이너리(이진) .. 2026. 7. 9.
확장자가 .jsonl인데 JSON이 깨진 게 아닙니다, JSON Lines(NDJSON) 정체와 일반 JSON과의 차이 데이터를 내려받았더니 확장자가 .jsonl이거나, 메모장으로 열어 보니 줄마다 중괄호로 시작하는 객체가 따로따로 적혀 있어 당황하는 경우가 있습니다. 평소 보던 JSON처럼 맨 앞에 대괄호 [가 없고, 객체 사이를 쉼표로 잇지도 않아서 깨진 파일로 오해하기 쉽습니다.이건 망가진 JSON이 아니라 JSON Lines라는 정상 형식입니다. NDJSON(Newline Delimited JSON)이라고도 부릅니다. 규칙은 단순합니다. 한 줄에 완결된 JSON 객체 하나를 넣고, 객체와 객체는 쉼표가 아니라 줄바꿈으로 구분합니다. 한 줄로 말하면일반 JSON 배열은 데이터를 하나의 큰 덩어리 [ {...}, {...} ]로 묶습니다. JSON Lines는 그 묶음을 풀어 객체마다 한 줄씩 세워 둔 것입니다. 그래.. 2026. 7. 7.
받은 JSON을 엑셀로 봐야 할 때, XLSX로 변환하는 가장 깔끔한 방법 API에서 내려받은 데이터나 동료가 보내 준 파일이 .json인데, 정작 검토는 엑셀로 해야 하는 상황이 자주 생깁니다. 메모장으로 열면 중괄호와 따옴표가 빽빽해서 어디가 한 행인지조차 가늠이 안 됩니다.JSON을 엑셀(XLSX)로 바꾸는 일 자체는 코드 몇 줄이면 끝납니다. 다만 JSON이 평평한 표 모양이냐, 값 안에 또 값이 들어 있는 중첩 구조냐에 따라 결과가 크게 갈립니다. 실제로 변환해서 어떤 엑셀이 만들어지는지 직접 보여 드리겠습니다.변환에 쓴 환경아래 모든 결과는 직접 돌려서 나온 값입니다. 측정 환경은 윈도우 11, 파이썬 3.14.3이고, 라이브러리는 pandas 3.0.1과 엑셀 기록 엔진인 openpyxl 3.1.5를 썼습니다. 두 라이브러리는 한 번만 설치하면 됩니다.pip ins.. 2026. 7. 6.
JSON "Expecting property name", "Expecting ',' delimiter" 오류, 증상별로 원인 찾고 고치기 JSON 파일을 읽히려는데 빨간 글씨로 이런 메시지가 뜬 적이 있을 것입니다.Expecting property name enclosed in double quotes: line 1 column 2 (char 1)Expecting ',' delimiter: line 1 column 15 (char 14)Illegal trailing comma before end of object: line 1 column 26 (char 25)웹에서는 흔히 "Unexpected token"으로, 파이썬에서는 위처럼 표시됩니다. 표현은 달라도 원인은 거의 정해져 있습니다. JSON은 문법이 까다로워서, 사람이 손으로 고치다 보면 쉼표 하나, 따옴표 하나에서 어긋나기 때문입니다.이 글은 자주 나오는 잘못된 JSON을 실제로 .. 2026. 7. 5.