Python不使用pandas遍历CSV行时如何跳过含'-'和'NA'的行及排错
问题原因
- 内层循环的
continue作用域错误:你在内层遍历prices的循环中使用的continue,仅会跳过当前price的校验逻辑,进入下一个price的遍历,既不会跳出内层循环,也不会跳过当前行的后续处理逻辑。 for...else逻辑使用错误:Python中for循环绑定的else分支,仅会在内层循环全程没有触发break、完整遍历完所有元素时执行。你当前的代码中内层循环永远不会触发break,因此else分支的pass总会执行,后续的print(values)无论什么情况都会运行,导致所有行都被输出。- (可选优化)判断逻辑
"-" in price会匹配所有包含-的元素,如果你需要过滤的是「整个元素完全等于-或NA」的行,建议使用全等判断==,避免误过滤包含这两个字符的合法值。
修正实现
基础写法(逻辑清晰易读)
for row in open("modified_data.csv"): values = row.strip().split(',') valid_row = True # 仅校验索引1及之后的元素 for price in values[1:]: if price == "-" or price == "NA": valid_row = False break # 仅保留有效行 if valid_row: print(values) # 此处可添加写入新CSV的逻辑
简化写法(用any()函数减少嵌套)
for row in open("modified_data.csv"): values = row.strip().split(',') # 判断索引1之后的元素是否不存在要排除的值 if not any(price in ("-", "NA") for price in values[1:]): print(values)
如果需要写入新CSV,直接将print(values)替换为逗号拼接后写入文件的逻辑即可,无需引入pandas。
内容的提问来源于stack exchange,提问作者Mathhurtsmybrain
相关产品推荐
相关产品推荐

