Python 如何删除经度/纬度半径以外的CSV表格值?

Python 如何删除经度/纬度半径以外的CSV表格值?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个csv文件,其中有一个表,表中有经度、纬度和风速列。我有一个代码,它接受csv文件并删除指定范围之外的值。我希望保留经度/纬度在位于-71.5经度和40.5纬度的点的0.5 lon/lat半径内的值 下面的示例代码删除经度和纬度分别不在-71到-72和40到41之间的任何值。当然,这将在我感兴趣的点周围保留±0.5 lon/lat的平方范围内的值。但我感兴趣的是在我感兴趣的点的半径为0.5 lon/lat的圆形边界内找到值。我应该如何修改我的代码 import pandas as pd

我有一个csv文件,其中有一个表,表中有经度、纬度和风速列。我有一个代码,它接受csv文件并删除指定范围之外的值。我希望保留经度/纬度在位于-71.5经度和40.5纬度的点的0.5 lon/lat半径内的值

下面的示例代码删除经度和纬度分别不在-71到-72和40到41之间的任何值。当然,这将在我感兴趣的点周围保留±0.5 lon/lat的平方范围内的值。但我感兴趣的是在我感兴趣的点的半径为0.5 lon/lat的圆形边界内找到值。我应该如何修改我的代码

import pandas as pd
import numpy
df = pd.read_csv(r"C:\\Users\\xil15102\\Documents\\results\\EasternLongIsland50.csv") #file path
indexNames=df[(df['Longitude'] <= -72)|(df['Longitude']>=-71)|(df['Latitude']<=40)|(df['Latitude']>=41)].index
df.drop(indexNames,inplace=True)
df.to_csv(r"C:\\Users\\xil15102\\Documents\\results\\EasternLongIsland50.csv")
将熊猫作为pd导入
进口numpy
df=pd.read_csv(r“C:\\Users\\xil15102\\Documents\\results\\EasternLongIsland50.csv”)#文件路径
indexNames=df[(df[‘经度’]=-71)|(df[‘纬度’]=41)]。索引
drop(indexNames,inplace=True)
df.to_csv(r“C:\\Users\\xil15102\\Documents\\results\\EasternLongIsland50.csv”)

您应该编写一个函数来计算与感兴趣点的距离,然后删除这些距离。一些帮助。如果将
is not_in_area
作为计算距离并检查距离是否
dist<0.5
的函数来实现,则可以肯定下面的示例会起作用

df=df.drop(df[不在区域(df.lat,df.lon)].index)

(此代码摘自)


编辑:删除不在区域内的值,而不是哈哈的值。

基本上,您需要检查某个值是否与中心点有一定距离(-71.5和40.5);为此,请使用毕达哥拉斯定理/距离公式:

d=sqrt(dx^2+dy^2)

因此,在编程方面,我会这样做:

from math import sqrt

drop_indices = []

for row in range(len(df)):
    if (sqrt(abs(-71.5 - df[row]['Longitude'])*abs(-71.5 - df[row]['Longitude']) + abs(40.5-df[row]['Latitude'])*abs(40.5-df[row]['Latitude']))) > 0.5:
       drop_indices.append(row)

df.drop(drop_indices)

很抱歉,这是一种令人厌恶的方式来摆脱行,您的方式看起来更好,但代码应该可以工作

这是否适用于POI接近0°的情况?我知道这不是问题的价值观,但一个合理的解决方案可能也适用于整个经络。这是一个非常好的观点。为了处理这种情况,我想你必须先测试它是否接近,然后从360度中减去给定的经度,然后将该值加上任何接近0的值来计算纵向距离。这对于较大的半径也不适用,因为它在弯曲空间中使用二维距离。为了得到更精确的值,你应该取纬度测量值的sin乘以地球半径,再乘以纬度值的cos。我认为完整的解决方案是检查圆锥体中心是否包括被测点。超级令人恼火,对于这个用户的用例来说可能不是必需的,但对于一个通用的解决方案来说,可能仍然是最终正确的过程。对我来说,这似乎更像是一个算法问题,不是吗?