【发布时间】: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'
标签: python python-2.7 pandas jupyter-notebook global