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

Pandas DataFrame.loc筛选无法排除空值的问题求助

问题排查与解决方案

先确认空值的真实形态

首先得搞清楚ID和SSID列里的"空值"到底是什么——有可能不是纯粹的空字符串,而是带空格、制表符这类空白字符,导致!= ''判断失效。可以先跑一行代码查看这两列的所有唯一值:

print("ID列唯一值:", results['ID'].unique())
print("SSID列唯一值:", results['SSID'].unique())

针对性解决方案

方案1:处理空白字符后筛选

如果发现有空白字符,先把字符串两端的空白去掉,再做判断:

# 去除列中字符串的首尾空白
results['ID'] = results['ID'].str.strip()
results['SSID'] = results['SSID'].str.strip()

# 执行筛选(用isin简化多值判断)
filtered_data = results.loc[
    (results['ID'] != results['SSID']) &
    (~results['number1'].isin(['8888888888', '9999999999'])) &
    (results['ID'] != '') &
    (results['SSID'] != '')
]
filtered_data.to_excel(writer, sheet_name='Priority', startrow=1)

方案2:兼顾NaN与空字符串的双重判断

如果之前替换NaN为空字符串的操作没覆盖所有情况(比如还有残留的NaN),可以同时用非空判断和空字符串判断:

import pandas as pd

filtered_data = results.loc[
    (results['ID'] != results['SSID']) &
    (~results['number1'].isin(['8888888888', '9999999999'])) &
    pd.notna(results['ID']) &
    pd.notna(results['SSID']) &
    (results['ID'] != '') &
    (results['SSID'] != '')
]
filtered_data.to_excel(writer, sheet_name='Priority', startrow=1)

方案3:用字符串长度判断非空

直接通过字符串长度是否大于0来排除空值(包括空白字符),更稳妥:

filtered_data = results.loc[
    (results['ID'] != results['SSID']) &
    (~results['number1'].isin(['8888888888', '9999999999'])) &
    (results['ID'].str.len() > 0) &
    (results['SSID'].str.len() > 0)
]
filtered_data.to_excel(writer, sheet_name='Priority', startrow=1)

补充提示

  • 用isin()替代多个!=判断,代码更简洁,后续维护也方便。
  • 优先用results['ID'].unique()确认空值类型,再选对应的方案,避免盲目测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:57:09