두개의 리스트에서 가장 가까운 장소를 찾는 코드를 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 로 작성해야 정상적으로 작동한다.