continue不能直接过滤数据,而是配合for循环跳过含空字段(如None、''、NaN、纯空白)的当前行;Pandas中推荐用布尔索引高效过滤,仅在需复杂逻辑时才用iterrows()配合continue。
在数据清洗中,continue 本身不能直接“过滤”数据,而是配合循环(如 for)跳过当前迭代,常用于逐行检查并忽略不满足条件的记录。关键在于:先判断某行是否含空字段(如 none、空字符串 ''、nan 等),一旦发现就用 continue 跳过后续处理,只保留有效行。
明确“空字段”的具体含义
不同来源的数据,“空”可能有多种表现形式,需统一识别:
- 空字符串:
'' - None 值:
None - Pandas 中的 NaN:
pd.isna(x)或pd.isnull(x) - 仅空白字符的字符串:
str.isspace()或str.strip() == ''
用 for 循环 + continue 实现行级跳过
适用于列表嵌套字典、元组或 DataFrame 行迭代等场景。例如处理字典列表:
data = [
{'name': '张三', 'age': 25, 'city': '北京'},
{'name': '', 'age': 30, 'city': '上海'}, # name 为空 → 跳过
{'name': '李四', 'age': None, 'city': '广州'}, # age 为 None → 跳过
{'name': '王五', 'age': 28, 'city': '深圳'}
]
<p>cleaned = []
for row in data:</p><h1>检查任意字段是否为空(按需调整判断逻辑)</h1><pre class="brush:php;toolbar:false;">if not row['name'] or row['name'].strip() == '' \
or pd.isna(row['age']) \
or not row['city'] or row['city'].strip() == '':
continue # 跳过这一行,不加入 cleaned
cleaned.append(row)
在 Pandas 中更推荐用布尔索引,continue 仅用于自定义逻辑
continue 在 Pandas 的 iterrows() 中可用,但效率低,不推荐用于大数据;真正高效的方式是向量化过滤:
# 推荐做法:用布尔掩码一次性过滤 import pandas as pd import numpy as np <p>df = pd.DataFrame(data)</p><h1>找出所有字段都非空(非 NaN、非空字符串、非 None)的行</h1><p>mask = ( df['name'].notna() & (df['name'].str.strip() != '') & df['age'].notna() & df['city'].notna() & (df['city'].str.strip() != '') ) clean_df = df[mask].copy() </p>
只有当你需要在循环中做复杂判断(比如动态规则、日志记录、调用外部函数校验)时,才考虑在 for idx, row in df.iterrows(): 中使用 continue。
注意边界情况和类型安全
避免因字段缺失或类型错误导致报错:
- 用
row.get('field', None)替代row['field']防止 KeyError - 对可能为数字的字段,先检查是否为 NaN 再转字符串,避免
NaN.strip()报错 - 统一空值判断逻辑,例如封装一个
is_empty(x)函数复用











