imhamburger 님의 블로그

PostgreSQL의 JSON 타입 컬럼을 Pandas로 읽을 때 본문

판다스(Pandas)

PostgreSQL의 JSON 타입 컬럼을 Pandas로 읽을 때

imhamburger 2025. 10. 19. 21:44

이번 프로젝트는 지난번에 배포한 매칭 시스템을 더 고도화하기 위한 작업을 진행하였다.

그 과정에서 이번에 이력서 점수 계산 요소에 완성도를 포함하여 점수에 반영하는 걸로 하였는데 문제가 발생했다.

 

문제

getAvgResumeScore 함수에서 이력서 완성도(Resume completeness)를 판정할 때 isnull() 혹 fillna() 가 먹지 않아 조건문 if not v: 가 잘못 동작했다. 데이터가 NULL이어야 할 필드가 {} (빈 JSON/object) 로 들어와서 빈값을 NA로 처리하지 못했고, 그 결과 로직이 오작동했다.

 

원인

  • 데이터가 원래 NULL 또는 None 값을 포함하고 있었지만, JSON 변환 과정에서 null이 {}(빈 Object) 로 잘못 변환됨.
  • 특히, MongoDB나 PostgreSQL의 JSON 타입 컬럼을 Pandas로 읽을 때 NULL 값이 JSON 파서에 의해 {} 로 인식되는 경우가 있다고 함.
  • 현재 DB는 PostgreSQL 사용중

 

해결방법

기존코드

if pd.notnull(value) and value != '':
   score += weight

 

수정코드

def has_value(v):
    if not v or v == [] or v == '{}' or v == '{' or v == '[]':
       return False
    return True
    
if has_value(value):
    score += weight

 

 

결과

Average resume score 가 1.0이 아닌 0.52로 정상적으로 출력되었다.

값이 비어있어서 null으로 변환될 줄 알았는데 MongoDB나 PostgreSQL의 JSON 타입 컬럼을 Pandas로 읽을 때는 주의하자!