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

如何基于指定经纬度列表删除DataFrame中匹配的多行

需要删除DataFrame中所有经纬度与上述列表值匹配的行,该怎么做?

# 解决方案
### 方法1:元组集合匹配法
将目标经纬度转换为元组集合(提升匹配效率),然后判断DataFrame每行的经纬度元组是否在集合内,取反筛选即可:
```python
import pandas as pd

# 目标经纬度列表
target_coords = [[-82.99194508, 40.04649963], [-82.99223727, 40.04659349], [-82.99198391, 40.04614863], [-82.99211513, 40.04627218]]
# 转成元组集合
coord_set = set(tuple(coord) for coord in target_coords)

# 假设你的DataFrame是df,筛选出不在目标列表的行
filtered_df = df[~df.apply(lambda row: (row['longitude'], row['latitude']) in coord_set, axis=1)]

方法2:Merge反筛选法

把目标经纬度转为临时DataFrame,通过merge标记匹配状态,最后保留未匹配的行:

import pandas as pd

target_coords = [[-82.99194508, 40.04649963], [-82.99223727, 40.04659349], [-82.99198391, 40.04614863], [-82.99211513, 40.04627218]]
# 创建临时DataFrame
coord_df = pd.DataFrame(target_coords, columns=['longitude', 'latitude'])

# 合并并标记匹配情况
merged_df = df.merge(coord_df, on=['longitude', 'latitude'], how='left', indicator=True)
# 筛选仅在原DataFrame中存在的行(即未匹配的行)
filtered_df = merged_df[merged_df['_merge'] == 'left_only'].drop(columns=['_merge'])

方法3:浮点精度兼容法(可选)

如果经纬度存在浮点精度误差,用numpy.isclose做近似匹配:

import pandas as pd
import numpy as np

target_coords = [[-82.99194508, 40.04649963], [-82.99223727, 40.04659349], [-82.99198391, 40.04614863], [-82.99211513, 40.04627218]]

# 定义近似匹配函数
def is_target_coord(row):
    for lon, lat in target_coords:
        if np.isclose(row['longitude'], lon) and np.isclose(row['latitude'], lat):
            return True
    return False

# 筛选不匹配的行
filtered_df = df[~df.apply(is_target_coord, axis=1)]

内容的提问来源于stack exchange,提问作者Tallion 22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:20:23