全局名称'lats'未定义

时间:2017-11-20 20:19:42

标签: python python-2.7 pandas jupyter-notebook global

我已经执行了这段代码并且工作正常但是在第二次运行时它出现了一个错误,指出“全局名称未定义”。

这里我尝试使用纬度和经度将两个数据集链接在一起,然后为最接近该地点的ID分配一个ID

我该如何解决这个问题?

Place['Dr_Address_No'] = -1

place_lats = place['Latitude']
place_lngs = place['Longitude']

Dr_locations = pd.read_csv("dr.csv")

dr_lats = dr_locations['latitude']
dr_lngs = dr_locations['longitude']

def get_nearest_dr(place_lats, place_lngs, dr_lats, dr_lngs):
    nearest_drs = []

    for placeID in range(lats.shape[0]):
        place_lat = lats.iloc[placeID]
        place_lng = lngs.iloc[placeID]

        lat_distances = (place_lat - dr_lats.iloc[:].values) ** 2
        lng_distances = (place_lng - dr_lngs.iloc[:].values) ** 2

        distance_vector = np.sqrt(lat_distances + lng_distances)

        closest_index = distance_vector.argmin()
        closest_dr = dr_locations.iloc[closest_index]
        dr_full = dr_address.iloc[closest_index]

        nearest_drs.append(dr_full['Dr No'])


    return pd.Series(nearest_drs)

Place['Dr_No'] = get_nearest_dr(place_lats, place_lngs, dr_lats, dr_lngs)

Place

3 个答案:

答案 0 :(得分:0)

lats在函数中的任何位置都不存在。也许你的意思是place_lats

for placeID in range(lats.shape[0]):
        place_lat = lats.iloc[placeID]
        place_lng = lngs.iloc[placeID]

答案 1 :(得分:0)

尝试更改

for placeID in range(lats.shape[0]):
        place_lat = lats.iloc[placeID]
        place_lng = lngs.iloc[placeID]

for placeID in range(place_lats.shape[0]):
        place_lat = place_lats.iloc[placeID]
        place_lng = place_lngs.iloc[placeID]

正如我在原始评论中所述,您的代码中没有定义变量latslngs,因此在for placeID in range(lats.shape[0]):失败,因为您尝试访问未定义的变量。

答案 2 :(得分:0)

该错误意味着您尝试使用未在代码中定义的变量lats。如果没有更好地理解你的代码应该做什么,很难准确地说出修复,但这是我的猜测:

for placeID in range(place_lats.shape[0]):
    place_lat = place_lats.iloc[placeID]
    place_lng = place_lngs.iloc[placeID]

lats替换为已定义的place_lats。您也可以将函数声明更改为

def get_nearest_dr(lats, lngs, dr_lats, dr_lngs):

将在您的代码中定义latslngs