두개의 장소리스트를 비교해서 가까운 장소를 매칭하기

배우는杰·2023년 6월 6일
0

GeoCoding

목록 보기
1/2

두개의 리스트에서 가장 가까운 장소를 찾는 코드를 chatGPT의 도움을 받아 작성했다.

아래 예시는 수도권 예식장 리스트와 ATM 리스트를 비교해서 가장 가까운 곳의 ATM의 이름, 주소, 위경도 좌표를 매칭해주는 코드이다.

import pandas as pd
from geopy.distance import geodesic

wedding_venues_df = pd.read_excel('metropolitan_area_wedding_hall.xlsx')

device_locations_df = pd.read_excel('ATM_device__metro_location.xlsx')

def calculate_distance(lat1, lon1, lat2, lon2):
coords1 = (lat1, lon1)
coords2 = (lat2, lon2)
return geodesic(coords1, coords2).kilometers

results_df = pd.DataFrame(columns=['store_name', 'number', 'device_name', 'address', 'distance'])

for index, venue in wedding_venues_df.iterrows():
venue_name = venue['store name']
venue_lat = venue['latitude']
venue_lon = venue['longitude']

min_distance = float('inf')
nearest_device = None

# Calculate distance to each device location
for _, device in device_locations_df.iterrows():
    device_number = device['number']
    device_name = device['device name']
    device_lat = device['latitude']
    device_lon = device['longitude']

    distance = calculate_distance(venue_lat, venue_lon, device_lat, device_lon)

    # Update nearest device if a closer one is found
    if distance < min_distance:
        min_distance = distance
        nearest_device = (device_number, device_name, device['address'])

# Append the result to the DataFrame
results_df = results_df._append({
    'store_name': venue_name,
    'number': nearest_device[0],
    'device_name': nearest_device[1],
    'address': nearest_device[2],
    'distance': min_distance}, ignore_index=True)

results_df.to_excel('nearest_devices.xlsx', index=False)

print("Calculation complete. Results saved as 'nearest_ATM.xlsx'")

주의할점은 결과를 저장해주는 append 의 문법이 바뀌었다는 것이다.

chatGPT는 df.append 로 작성했는데 아래와 같이 오류 메시지가 나온다

AttributeError: 'DataFrame' object has no attribute 'append'. Did you mean: '_append'?

df._append 로 작성해야 정상적으로 작동한다.

profile
코딩배우는 아재

0개의 댓글