목차
반응형
회사에서 쓸 용도로 모든 법정동을 뽑아봤습니다.
인터넷에서는 제가 원하는 포맷이 없었어서 혹시나 필요하신 분 계실까 업로드합니다.
현재 기준으로 존재하는 법정동만 추출했습니다.
법정동 코드(읍면동)는 8자리까지만 확인하면 돼서 법정동코드가 원래는 10자리인데 8자리로 잘랐습니다.
법정동코드목록 무료 나눔(사본 만드시면 됩니다.)
https://docs.google.com/spreadsheets/d/1Vay4Y1uiLMOJUZQI1kbkgzkjpuPSUjr5e409XOwWpOU/copy
전체 리스트는 행정표준코드관리시스템(https://www.code.go.kr/stdcode/regCodeL.do)에서 다운받았습니다.
행정표준코드관리시스템 > 법정동 코드 전체 자료 다운로드
파이썬 활용 가공 방식
법정동코드는 총 10자리로 구성되어 있으며 규칙은 다음과 같습니다.
참고 > https://juso.dev/docs/reg-code-api/
- 가장 앞의 두 자리: [시/도]
- 그 다음 세 자리: [시/군/구]
- 그 다음 세 자리: [읍/면/동]
- 그 이후 나머지: [리]
import pandas as pd
df_bupjungdong = pd.read_csv(다운받은 파일 경로)
df_bupjungdong_active = df_bupjungdong.loc[df_bupjungdong['폐지여부']=='존재',:]
# 법정동코드를 기준으로 왼쪽부터 2자리까지 자른 값으로 유니크 값 추출
df_sido = df_bupjungdong_active.copy()
df_sido['법정동코드'] = df_sido['법정동코드'].astype(str).str[:2]
df_sido = df_sido.drop_duplicates(subset='법정동코드').reset_index(drop=True)
df_sido.rename(columns={'법정동코드':'시도코드','법정동명':'시도명'},inplace=True)
# 법정동코드를 기준으로 왼쪽부터 5자리까지 자른 값으로 유니크 값 추출
df_sigungu = df_bupjungdong_active.copy()
df_sigungu['법정동코드'] = df_sigungu['법정동코드'].astype(str).str[:5]
df_sigungu = df_sigungu[df_sigungu['법정동코드'].str[-3:] != '000'] # 오른쪽 3자리가 0인 값 제외
df_sigungu = df_sigungu.drop_duplicates(subset='법정동코드').reset_index(drop=True)
df_sigungu.rename(columns={'법정동코드':'시군구코드','법정동명':'시군구명'},inplace=True)
for idx, row in df_sigungu.iterrows():
sido_code = row['시군구코드'][:2]
matching_sido = df_sido[df_sido['시도코드'] == sido_code]
if not matching_sido.empty:
city_name = matching_sido.iloc[0]['시도명']
df_sigungu.at[idx, '시군구명'] = row['시군구명'].replace(city_name, '').strip()
# 법정동코드를 기준으로 왼쪽부터 8자리까지 자른 값으로 유니크 값 추출
df_bupmyungdong = df_bupjungdong_active.copy()
df_bupmyungdong['법정동코드'] = df_bupmyungdong['법정동코드'].astype(str).str[:8]
df_bupmyungdong = df_bupmyungdong[(df_bupmyungdong['법정동코드'].str[-6:] != '000000') & (df_bupmyungdong['법정동코드'].str[-4:] != '0000') & (df_bupmyungdong['법정동코드'].str[-3:] != '000')] # 오른쪽 6자리가 000000인 값과 오른쪽 5자리가 00000인 값 제외
df_bupmyungdong = df_bupmyungdong.drop_duplicates(subset='법정동코드').reset_index(drop=True)
# 전체법정동명 추가
df_bupmyungdong['전체법정동명'] = df_bupmyungdong['법정동명']
# 시도명 추가
df_bupmyungdong['시도명'] = df_bupmyungdong['법정동코드'].str[:2]
df_bupmyungdong['시도명'] = df_bupmyungdong['시도명'].map(df_sido.set_index('시도코드')['시도명'])
# 시군구명 추가
df_bupmyungdong['시군구명'] = df_bupmyungdong['법정동코드'].str[:5]
df_bupmyungdong['시군구명'] = df_bupmyungdong['시군구명'].map(df_sigungu.set_index('시군구코드')['시군구명'])
# 법정동명 수정
for idx, row in df_bupmyungdong.iterrows():
df_bupmyungdong.at[idx, '법정동명'] = row['법정동명'].replace(row['시도명'], '').replace(row['시군구명'], '').strip()
df_bupmyungdong = df_bupmyungdong[['법정동코드', '전체법정동명', '시도명', '시군구명', '법정동명', '폐지여부']]
import datetime as dt
current_date = dt.datetime.now().date()
df_bupmyungdong.to_csv('법정동코드_{}.csv'.format(current_date))
다운받은 파일의 경로에 파일 경로만 설정해주면 됩니다.
반응형
댓글