You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选Pandas DataFrame中经纬度在-90至90范围内的数据?

解决方案

1. 先清洗数据,筛选有效经纬度行

在调用distance函数前,先过滤出所有经纬度数值都在[-90, 90]范围内的行:

# 定义筛选条件:四个经纬度列的数值都处于-90到90之间
valid_mask = (
    (df_n['pickup_latitude'].between(-90, 90)) &
    (df_n['pickup_longitude'].between(-90, 90)) &
    (df_n['dropoff_latitude'].between(-90, 90)) &
    (df_n['dropoff_longitude'].between(-90, 90))
)

# 提取符合要求的有效数据
df_valid = df_n[valid_mask].copy()

2. 调用函数处理有效数据

对清洗后的df_valid调用distance函数计算距离:

# 计算有效数据的行驶距离
distance_travelled = distance(df_valid)

# 将计算结果添加到有效数据框中
df_valid['distance'] = distance_travelled

3. (可选)保留原数据结构并填充结果

如果需要保留原数据的完整结构,可将有效行的距离结果匹配回去,无效行的distance设为缺失值:

# 初始化原数据框的distance列为缺失值
df_n['distance'] = pd.NA

# 将有效数据的距离赋值回原数据框对应行
df_n.loc[valid_mask, 'distance'] = distance_travelled

4. 优化原distance函数(可选)

原函数使用iterrows遍历行效率较低,建议改用apply提升性能:

from geopy.distance import vincenty

def distance(df):
    return df.apply(
        lambda row: vincenty(
            (row['pickup_latitude'], row['pickup_longitude']),
            (row['dropoff_latitude'], row['dropoff_longitude'])
        ).mi,
        axis=1
    )

调用优化后的函数时,直接赋值即可:

df_valid['distance'] = distance(df_valid)

内容的提问来源于stack exchange,提问作者Robbie Case

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:30:56