본문 바로가기
생활(시사)정보/유용한 정보들

파이썬으로 엑셀의 시군구 주소 분리 작업하기

by good4me 2024. 11. 20.

goodthings4me.tistory.com

특별시, 광역시가 아니면서 구가 있는 시가 있다. 고양시, 수원시, 성남시, 용인시,  안산시, 안양시, 천안시, 청주시, 전주시, 창원시, 포항시 등이다. 아래 파이썬 코드는 이 시들의 지자체 명칭이 붙어있는 경우, 분리하는 코드이다.

 

주소 분리할 대상 엑셀 파일

주소 분리할 대상 엑셀 파일

 

법정동 주소 열을 보면,

 

 

  • 도로명주소와 다르게 시와 구 명칭이 붙어 있다. '창원마산합포구', '성남수정구'를 도로명주소처럼 '창원시 마산합포구'로 만들고 싶다.
  • 하단에 있는 서울의 동대문구, 서대문구 명칭은 그대로 사용해야 한다.
  • 엑셀 파일 E열에 SUBSTITUTE() 엑셀 함수 등 여러 함수를 복합적으로 이용하거나 VBA 코드를 짜서 변경할 수도 있지만, 파이썬 코드를 이용해서도 쉽게 바꿀 수 있다.

 

'성남분당구'를 '성남시 분당구'로 분리하기

import pandas as pd

# 엑셀 파일 불러오기
file_path = './data/k-apt/20241025_단지_기본정보.xlsx'
df = pd.read_excel(file_path, sheet_name='sheet1')

print(df.columns)
print(df.head())

mi_gu = {
    '창원마산합포구': '창원시 마산합포구', '창원마산회원구': '창원시 마산회원구', '고양일산동구': '고양시 일산동구',
    '고양일산서구': '고양시 일산서구', '고양덕양구': '고양시 덕양구', '성남분당구': '성남시 분당구',
    '성남수정구': '성남시 수정구', '성남중원구': '성남시 중원구', '수원권선구': '수원시 권선구',
    '수원영통구': '수원시 영통구', '수원장안구': '수원시 장안구', '수원팔달구': '수원시 팔달구',
    '안산단원구': '안산시 단원구', '안산상록구': '안산시 상록구', '안양동안구': '안양시 동안구',
    '안양만안구': '안양시 만안구', '용인기흥구': '용인시 기흥구', '용인수지구': '용인시 수지구',
    '용인처인구': '용인시 처인구', '창원성산구': '창원시 성산구', '창원의창구': '창원시 의창구',
    '창원진해구': '창원시 진해구', '전주덕진구': '전주시 덕진구', '전주완산구': '전주시 완산구',
    '천안동남구': '천안시 동남구', '천안서북구': '천안시 서북구', '청주상당구': '청주시 상당구',
    '청주서원구': '청주시 서원구', '청주청원구': '청주시 청원구', '청주흥덕구': '청주시 흥덕구',
    '포항남구': '포항시 남구', '포항북구': '포항시 북구'
}

def process_row(row):
    if not row['법정동주소']:
        return
    parts = str(row['법정동주소']).split(' ', 2)
    print(parts)
    if len(parts) > 1 and parts[1] in mi_gu:
        parts[1] = mi_gu[parts[1]]
    row['법정동주소'] = ' '.join(parts)
    return row

# 각 행에 대해 process_row 함수 적용
df_processed = df.apply(process_row, axis=1)
print(df_processed)

output_file_path = './data/k-apt/processed_k-apt.xlsx'
df_processed.to_excel(output_file_path, index=False)

print(f"작업완료! '{output_file_path}'.")

 

 

  • file_path: 엑셀 파일의 경로 지정. '20241025_단지_기본정보.xlsx'라는 파일을 읽어온다.
  • pd.read_excel: Pandas 라이브러리를 사용해서 지정된 파일과 시트(sheet1)를 불러온다.
  • df: 엑셀 데이터를 판다스 DataFrame 형식( 행과 열로 이루어진 테이블 구조 )으로 저장한다.
  • df.columns: DataFrame에 포함된 열 이름을 출력하여 확인할 수 있다.
  • df.head(): 판다스 함수인 head()를 통해 상위  5개 행 데이터를 확인한다.
  • process_row(): 법정동주소 컬럼의 행 값이 비어 있으면 함수를 종료하고, 값이 있으면 법정동주소를 문자열로 변환한 뒤, 공백 ' '을 기준으로 최대 3부분으로 나눈다. 예: '서울특별시 강남구 역삼동' → ['서울특별시', '강남구', '역삼동']

 

 

  • if len(part) > 1 ~ 문: split() 함수의 결과는 리스트이기 때문에 parts[1]이 구 이름에 해당하며, mi_gu 딕셔너리에 있으면 대응하는 값으로 변경한다.
  • ' '.join(parts): 수정된 구 명칭을 포함해 주소를 다시 하나의 문자열로 결합한다.
  • df.apply(): DataFrame의 각 행(axis=1)에 대해 process_row 함수를 적용하여 결과를 새로운 DataFrame df_processed에 저장한다.
  • output_file_path: 처리된 데이터를 저장할 파일 경로를 지정한다.
  • to_excel(): 결과 DataFrame을 엑셀 파일로 저장한다.
  • index=False: DataFrame의 인덱스 열은 저장하지 않도록 설정한다.

 

 

주소 변환 결과

변환된 파일 생성

 

엑셀 주소 변환 결과

 

 

 

K-apt 공동주택관리 정보시스템

 

K-apt에서 전국의 아파트 단지 정보 데이터를 엑셀로 다운로드 받을 수 있습니다.  

 

K-apt 자료실 바로가기

 

 

k-apt 사이트 소통마당

 

 

k-apt 사이트 자료실 - 아파트 단지 정보 엑셀 파일 다운로드
k-apt 사이트 자료실 - 아파트 단지 정보 엑셀 파일 다운로드

댓글