본문 바로가기
반응형

전체 글413

Python json.dumps에서 NaN이 나올 때: allow_nan=False와 비유한 수 검사 Python에서 json.dumps가 출력한 NaN을 다른 프로그램이 거부한다면 기본 직렬화 옵션부터 확인하세요. 기본값은 NaN·Infinity·-Infinity를 내보내지만 이 토큰들은 표준 JSON 숫자가 아닙니다. 전송 전에 거부하려면 allow_nan=False를 사용하고, 어느 값이 문제인지 찾아야 한다면 중첩 값도 검사하세요.실습은 Python 3.12.14의 내장 json과 float를 사용합니다. 값을 무조건 null로 바꾸는 것이 답은 아닙니다. 원래 NaN인지 무한대인지 이미 결측값이었는지 구분이 사라지므로 수신 데이터의 의미에 맞는 정책을 먼저 정해야 합니다. 코드 블록은 위에서부터 같은 Python 세션에서 실행하세요.1. 기본 출력과 거부 옵션을 비교합니다import jsonim.. 2026. 10. 14.
SQL COUNT(DISTINCT)로 두 열 조합 세기: 문자열 연결 충돌과 NULL 두 열의 서로 다른 조합을 세려면 값을 문자열로 이어 붙이기보다 SELECT DISTINCT a, b로 쌍을 남긴 뒤 바깥에서 COUNT(*)를 세세요. 서로 다른 쌍이 같은 문자열이 될 수 있고, NULL이 들어간 연결식은 집계에서 빠질 수 있기 때문입니다.아래 실습은 SQLite 3.53.1·Python 3.12.14에서 실행했습니다. 예제 열은 TEXT와 기본 BINARY 비교를 사용합니다. 여러 인자를 받는 COUNT(DISTINCT ...) 문법은 DBMS마다 다르므로 여기서는 SQLite에서 확인한 방식만 사용합니다. 아래 Python 코드 블록은 새 세션에서 위부터 순서대로 실행하세요.1. 문자열 연결은 서로 다른 쌍을 합칠 수 있습니다import sqlite3db = sqlite3.conn.. 2026. 10. 14.
pandas crosstab 비율이 다르게 나올 때: 행·열·전체 분모와 빈 범주 pd.crosstab의 같은 셀이 서로 다른 비율로 나온다면 먼저 분모를 확인하세요. normalize="index"는 해당 행의 합, "columns"는 해당 열의 합, "all"은 표 전체의 합으로 나눕니다. 어느 값이 맞는지는 “그룹 안에서 결과를 비교하는가, 결과 안에서 그룹을 비교하는가”에 따라 달라집니다.아래에서는 비대칭 빈도표 하나를 세 방식으로 계산하고, 관측되지 않은 범주와 실제 결측값을 구분합니다. 코드는 pandas 2.2.3·Python 3.12.14에서 실행했습니다. 다른 버전이나 자료형에서는 결측 처리 결과를 다시 대조하세요. 코드 블록은 첫 import부터 위에서 아래 순서로 같은 Python 세션에서 실행하세요.1. 먼저 빈도표와 집계된 행 수를 확인합니다import pand.. 2026. 10. 14.
Python with에서 예외가 사라질 때: contextmanager와 raise with 안에서 발생한 예외가 호출자에게 전달되지 않는다면 컨텍스트 매니저의 예외 처리 방식을 확인하세요. @contextmanager의 yield 주변에서 예외를 잡고 다시 발생시키지 않으면 해당 예외가 처리된 것으로 끝납니다. 로그만 남기고 호출자에게 실패를 알리려면 except 안에서 raise를 사용하세요.정리 작업을 했다는 사실과 예외 전달은 별개입니다. 아래 예제는 Python 3.12.14 표준 라이브러리로 실행했습니다. 코드 블록은 앞에서부터 같은 세션에서 실행하세요. 화면의 print는 흐름을 관찰하기 위한 출력이며 실제 서비스에서는 필요한 로깅 정책에 맞춰 바꾸면 됩니다.1. 로그만 남기면 예외가 억제될 수 있습니다from contextlib import contextmanager@co.. 2026. 10. 13.
SQL 재귀 CTE가 끝나지 않을 때: 순환 참조와 깊이 제한 재귀 CTE가 끝나지 않는다면 순환 데이터와 재귀부의 종료 조건을 함께 확인하세요. UNION은 반환 행 전체를 비교하므로 노드에 depth나 경로를 붙이면 같은 노드도 새 행이 됩니다. 깊이 제한은 재귀부에서 실제로 증가하는 값에 적용하고, 순환 차단이 필요하면 방문 경로도 검사해야 합니다.이 글은 SQLite 3.53.1의 동작을 실행한 예제입니다. 다른 DBMS의 재귀 제한·경로 타입·문법으로 그대로 일반화하지 않습니다. 무한 반복하는 쿼리를 실행하는 대신 재귀 CTE 내부에 양수 행 수 제한을 넣어 안전한 작은 반례로 비교합니다.1. 세 노드가 다시 돌아오는 데이터를 만듭니다CREATE TABLE edge ( src INTEGER NOT NULL, dst INTEGER NOT NULL).. 2026. 10. 13.
pandas explode에서 행이 늘어날 때: 빈 리스트·문자열·여러 열 길이 검증 explode 뒤 행이 예상보다 많아졌다면 셀의 실제 타입, 빈 리스트, 여러 열을 펼치는 방식을 먼저 확인하세요. 빈 리스트는 행을 삭제하지 않고 결측값 한 행으로 남습니다. 리스트처럼 보이는 문자열도 자동으로 해석하지 않습니다. 짝이 있는 여러 열은 한 번의 explode(["sku", "qty"])로 함께 펼쳐야 합니다.목표는 오류 메시지를 없애는 것보다 입력 한 행이 출력 몇 행이 되는지 설명하는 것입니다. 주문 ID를 보존하고, 펼친 뒤 반복되는 주문 금액을 다시 합산하지 않는 것까지 확인하겠습니다. 아래 코드는 pandas 2.2.3·Python 3.12.14에서 같은 세션으로 실행했습니다.1. 빈 리스트와 문자열을 같은 입력에서 비교합니다import pandas as pddf = pd.Dat.. 2026. 10. 13.
반응형