未定义全局名称“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
【问题讨论】:
此代码中的任何位置都没有值lats
或 lngs
。因此,要么您没有正确发布所有代码,要么错误消息实际上是正确的,并且在此代码中的任何位置都没有定义全局值 lats
,因此它在这一行失败 for placeID in range(lats.shape[0]):
是的@JamesRusso 将其说明为错误行。它以前可以工作,你知道我该如何解决这个问题吗?
如果您在该代码中进行查找,则显然没有定义为 lats
的变量。这很可能是一个错字,因为我没有看到 lats
在任何地方定义。 lats
很可能应该是 place_lats
,您需要分别将 lats
和 lngs
替换为 place_lats
和 place_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]
正如我在原始评论中所述,您的代码中没有定义变量 lats
或 lngs
,因此它在 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):
这将在您的代码中定义 lats
和 lngs
。
【讨论】:
我已将代码更改为上述代码,但现在出现错误 numpy.float64' object has no attribute 'iloc'以上是关于未定义全局名称“lats”的主要内容,如果未能解决你的问题,请参考以下文章
python:NameError:全局名称'...'未定义[重复]
在引发 ValidationError 期间“未定义全局名称'_'”