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

对DataFrame执行条件筛选返回NaN?坐标数据离群值处理疑问

问题原因及解决方案

为什么返回NaN?

你得到NaN的核心原因是筛选条件的维度不匹配:

  • 你计算的lat_mean和lat_std是对应两列(pickup_latitude、dropoff_latitude)各自的均值和标准差,因此np.abs(df[两列] - lat_mean) < 2*lat_std返回的是一个二维布尔DataFrame(和原df的这两列行数、列数一致,每个单元格表示对应位置是否满足条件)。
  • 当用二维布尔数组直接索引原df时,pandas不会删除行,而是保留所有行,但将不满足对应列条件的单元格值替换为NaN,这就是你看到结果里全是NaN的原因。

正确的筛选方式

你的需求是保留符合条件的样本行,需要把二维的列级布尔条件合并为一维的行级布尔条件:

情况1:要求每行的两个纬度值都在各自列的均值±2倍标准差范围内

# 生成列级布尔条件
lat_mask = np.abs(df[['pickup_latitude', 'dropoff_latitude']] - lat_mean) < 2 * lat_std
# 合并为行级条件:该行所有列都满足条件
row_mask = lat_mask.all(axis=1)
# 筛选行
filtered_df = df[row_mask]

情况2:只要每行任意一个纬度值满足条件就保留

# 合并为行级条件:该行至少一列满足条件
row_mask = lat_mask.any(axis=1)
filtered_df = df[row_mask]

补充说明

如果你的真实需求是把超出范围的纬度值替换为NaN(而非删除行),那你当前的代码结果是符合预期的,但显然这和你“保留样本”的需求不符,所以需要用上述行级筛选的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:20:02