如何用Pandas(偏好for循环)移除含空字符串及指定值的行?
解决方案
原代码报错原因
你直接用df[i] == ""会返回一个布尔类型的Series(整列的比较结果),而if语句无法直接判断整个Series,这就是触发TypeError的原因。
符合要求的for循环实现
我们可以通过遍历每一行,检查该行是否包含需要排除的值(空字符串""、"Unspecified"、"Undetermined"),最终筛选出需要保留的行:
# 定义需要排除的目标值集合 exclude_values = {"", "Unspecified", "Undetermined"} # 初始化列表存储每行的保留标记 keep_rows = [] # 遍历DataFrame的每一行 for _, row in df.iterrows(): # 检查当前行是否存在任何需要排除的值 has_excluded = any(value in exclude_values for value in row.values) # 如果没有需要排除的值,标记为保留(True),否则标记为丢弃(False) keep_rows.append(not has_excluded) # 应用标记过滤DataFrame filtered_df = df[keep_rows]
代码说明
df.iterrows():遍历DataFrame的每一行,返回行索引和行数据(这里用_忽略索引)any(value in exclude_values for value in row.values):检查当前行的所有值中,是否存在属于排除集合的元素keep_rows:存储每行的保留状态,最终通过布尔索引df[keep_rows]得到过滤后的数据集
补充:更高效的矢量化实现(非for循环)
如果后续允许放弃for循环,Pandas的矢量化方法会更高效(尤其适合9000+行的数据集),一行代码即可完成:
exclude_values = {"", "Unspecified", "Undetermined"} filtered_df = df[~df.isin(exclude_values).any(axis=1)]
内容的提问来源于stack exchange,提问作者Hakari Kinji
相关产品推荐
相关产品推荐

