Python

[Python] 파이썬에서 우편번호를 행정동으로 변환하는 방법

지구(Jigoo) 2025. 6. 15. 17:58

입지분석 프로젝트를 진행하고 있는데 우편번호 → 행정동 변환 방법은 나중에도 필요할 것 같아 기록한다.

* 이 글은 서울특별시 DB 를 기준으로 작성되었습니다.

 

1. 먼저 아래 링크에서 지역별 주소 DB를 다운로드 한 다음 [엑셀변환방법]을 참고해 CSV 파일로 변환한다.

 

 

 

  • 위 링크에서 지역별 주소 DB를 다운로드하면 zipcode_DB.zip 압축파일이 받아지며 압축 해제 후
    원하는 지역의 txt 파일을 [엑셀변환방법]을 바탕으로 CSV 파일로 변환하면 됩니다.
  • 저는 변환한 CSV 파일을 서울특별시 우편번호DB.csv 로 저장했습니다.

 

 

2. 파이썬에서 변환한 주소 DB 파일을 불러온 후 우편번호를 5자리로 맞춰준다.

  • CSV 파일 특성 상 맨 앞에 0이 있으면 0을 삭제처리하기 때문에 우편번호가 0으로 시작하는 서울의 경우 모든 우편번호가 4자리로 인식됩니다. 따라서 아래 코드를 활용해 맨 앞에 0을 추가했습니다.
  • 0으로 시작하지 않는 지역은 이 과정을 생략할 수 있고, 0으로 시작하는 경우와 시작하지 않는 경우가 혼재하는 지역은 0으로 시작하는 우편번호만 별도로 처리해야 합니다.
# 주소DB 파일 불러오기
address = pd.read_csv("서울특별시 우편번호DB.csv", encoding = "cp949")
address.head()

# 우편번호 길이 확인 (아래 코드 실행시 4가 출력됩니다)
print(address["우편번호"].dropna().apply(lambda x: len(str(x))).unique())

# 우편번호 5자리화
address["우편번호"] = address["우편번호"].apply(lambda x: "0"+str(x))
address.head()

# 사용하지 않는 칼럼 삭제
print(address.columns.tolist())
address = address[['우편번호', '시도', '시군구', '법정동명', '행정동명']]
address = address.dropna()
address.head()

 

3. 행정동으로 변환하고자 하는 우편번호 칼럼을 가지는 기존 데이터프레임과 위 address 데이터 프레임을 병합한다

  • 아래 코드에서 df 가 기존 데이터 프레임입니다
  • merge 함수를 활용해 LEFT JOIN 수행
    • left_on: 기존 데이터프레임의 우편번호 칼럼 명
    • right_on: address 데이터프레임의 우편번호 칼럼 명
# 우편번호 매치
merged = pd.merge(df, address, how = "left", left_on = "도로명우편번호", right_on = "우편번호")
merged.head()

 

 

References

[1] https://blog.naver.com/pareko/221705164228

[2] https://velog.io/@darinlee/PY2