Pandas loc筛选失效求助:无法过滤空值与指定状态值
Pandas条件筛选未生效问题解决
问题原因
你写的筛选逻辑用了|(逻辑或),这是核心错误:任何一行只要满足其中一个!=条件就会被保留。比如Status为"Ready"的行,它同时满足!= "NaN"、!= ""、!= " ",所以会被错误保留;同理,空值或字符串"NaN"的行也会因为满足其他!=条件被留下,导致筛选完全失效。
另外,CSV中的字符串"NaN"、空格、空字符串属于不同的空值形式,直接用!=判断无法统一处理,也会导致部分空值漏筛。
修正方案
先统一处理所有空值形式,再用正确的逻辑条件筛选:
import pandas as pd import numpy as np # 读取CSV文件 df = pd.read_csv("你的文件路径", encoding="ISO-8859-1") # 把字符串"NaN"、纯空格、空字符串统一转为真正的NaN df["Status"] = df["Status"].replace({"NaN": np.nan, " ": np.nan, "": np.nan}) # 筛选:保留Status不为空且不等于"Ready"的行 df = df.loc[(df["Status"].notna()) & (df["Status"] != "Ready")] # 排序并重置索引 df = df.sort_values(by=["Room Number"]) df = df.reset_index(drop=True)
关键说明
- 用
replace()把各种自定义空值转为Pandas识别的np.nan,后续可以用notna()一次性排除所有空值,避免重复判断。 - 筛选条件用
&(逻辑与),确保只有同时满足「非空」和「不等于Ready」的行才会被保留,符合你的需求。
内容的提问来源于stack exchange,提问作者Patrick Bickle
相关产品推荐
相关产品推荐

