未定义全局名称“lats”

Posted

技术标签:

【中文标题】未定义全局名称“lats”【英文标题】:Global name 'lats' not defined 【发布时间】:2018-05-04 03:56:48 【问题描述】:

我已经执行了这段代码,它运行良好,但在第二次运行时出现错误,指出“未定义全局名称纬度”。

在这里,我尝试使用纬度和经度将两个数据集链接在一起,然后将 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

【问题讨论】:

此代码中的任何位置都没有值 latslngs。因此,要么您没有正确发布所有代码,要么错误消息实际上是正确的,并且在此代码中的任何位置都没有定义全局值 lats,因此它在这一行失败 for placeID in range(lats.shape[0]): 是的@JamesRusso 将其说明为错误行。它以前可以工作,你知道我该如何解决这个问题吗? 如果您在该代码中进行查找,则显然没有定义为 lats 的变量。这很可能是一个错字,因为我没有看到 lats 在任何地方定义。 lats 很可能应该是 place_lats,您需要分别将 latslngs 替换为 place_latsplace_lngs 问问自己,什么是“lats”?为什么它不见了?它以前存在吗? SO 是一个糟糕的调试器。此处缺少代码,或者您进行了不理解的更改。 @JamesRusso 我已将所有纬度更改为 place_lats 和 place_lngs 但我没有收到错误 numpy.float64' object has no attribute 'iloc' 【参考方案1】:

lats 在函数的任何地方都不存在。也许你的意思是place_lats

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

【讨论】:

我已经试过了,它仍然打印出错误【参考方案2】:

尝试改变

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]): 上失败,因为您试图访问未定义的变量。

【讨论】:

【参考方案3】:

该错误意味着您正在尝试使用未在代码中定义的变量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

【讨论】:

我已将代码更改为上述代码,但现在出现错误 numpy.float64' object has no attribute 'iloc'

以上是关于未定义全局名称“lats”的主要内容,如果未能解决你的问题,请参考以下文章

python:NameError:全局名称'...'未定义[重复]

NameError:未定义全局名称“reduce”

在引发 ValidationError 期间“未定义全局名称'_'”

名称错误:未定义全局名称“BaseFunction”

熊猫不进口吗? 'NameError:未定义全局名称'pandas''

未定义全局名称“reverse”