【问题标题】:select row under condition of points distance在点距离的条件下选择行
【发布时间】:2017-03-30 08:30:51
【问题描述】:

我有两个数据集犯罪和相机。(第一张图片是犯罪-Lon 是经度,Lat 是纬度;第二张是相机-X 是经度,Y 是纬度)

我的目的是选择相机 89('OBJECTID'=89) 内距离小于 200 英尺的所有犯罪。在sql里面应该是这样的

select*
from crime
where "distance with camera89" < 200feet

import pandas as pd
from geopy.distance import vincenty

crime = pd.read_csv('/Users/xccxken/Desktop/crime.csv',low_memory=False)
camera = pd.read_csv('/Users/xccxken/Desktop/camera.csv')

def xycamera(id):
    row=camera[camera['OBJECTID'] == id]
    x = row[['X']]
    y = row[['Y']]
    return x,y

print (xycamera(89))

c200 = crime[vincenty((crime['Lon'],crime['Lat']),xycamera(89)).feet>200]

我有一个 ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。在 c200=crime[vincenty((crime['Lon'],crime['Lat']),xycamera(89)).feet>200]

希望有人能告诉我如何解决它。

如果有更好的方法来实现我的目标,那就更好了。谢谢!

这里是一个如何使用 vincenty() 的例子 和https://pypi.python.org/pypi/geopy如果你需要

>>> from geopy.distance import vincenty
>>> newport_ri = (41.49008, -71.312796)
>>> cleveland_oh = (41.499498, -81.695391)
>>> print(vincenty(newport_ri, cleveland_oh).miles)
538.3904451566326

【问题讨论】:

    标签: python pandas select error-handling distance


    【解决方案1】:

    我不知道vincenty() 如何期望您的坐标(元组或诸如此类),但可以肯定的是,您在最后一行缺少左括号。 (或者你有一个额外的关闭)。根据您的示例,.feet 之后的括号可能是多余的

    试试这个:

    cameraCoords = xycamera(89)
    vincenty((11,11),(12,12)).feet
    crime[vincenty((crime['Lon'],crime['Lat']),cameraCoords ).feet>200]
    

    运行这个,粘贴你的整个代码并将整个回溯粘贴到这里

    【讨论】:

    • 谢谢。我已经解决了你说的括号问题。有用。但现在有一个新错误。希望你有时间可以帮助我
    • 新的错误是什么? xycamera(89) 的输出是什么?
    • ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
    • (X 87 -77.628824, Y 87 43.13503) 结果如下
    • (X 87 -77.628824, Y 87 43.13503)xycamera(89)的输出像这样
    猜你喜欢
    • 2013-10-18
    • 2013-11-28
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多