使用Python筛选CSV数据失败求助:无法按面积条件过滤数据
问题分析与修复方案
嘿,别着急,我帮你看看问题出在哪~你的代码里有几个关键小问题导致过滤面积的逻辑没生效,咱们一步步理清楚:
1. 文件指针耗尽,第二个循环根本没执行
你写了两个连续的for val in canada_vals循环,第一个循环已经把文件里的所有行都读完了,文件指针跑到了末尾,第二个循环自然就读取不到任何内容,所以面积过滤的代码完全没跑起来。
2. 直接索引字符串字符,不是CSV列
你现在的val是文件里的一整行字符串,比如一行是"AK,123,150,...",val[2]取的是第三个字符(也就是1),而不是第三列的数值!这就是之前出现"无法将字符串转换为浮点数"错误的根源——你把单个字符转成float了,后来虽然没报错,但逻辑完全不对。
修复后的完整代码
我们需要把读取的每一行分割成列,再把两个过滤条件合并到同一个循环里,同时用更可靠的方式处理CSV:
import csv # 用csv模块处理CSV,能规避手动分割的各种坑(比如字段含逗号的情况) def write_files(lg_fire_data, combined): # 写入第一个文件的表头 with open(lg_fire_data[0], 'r') as first: combined.write(first.read()) for i in range(1, len(lg_fire_data)): with open(lg_fire_data[i], 'r') as canada_vals: reader = csv.reader(canada_vals) next(reader, None) # 跳过当前文件的表头 for row in reader: # 先过滤首列为AK的行 if row[0] == 'AK': continue # 处理第三列的面积值,加异常捕获避免无效数值崩溃 try: area = float(row[2]) if area >= 200: # 把分割后的列重新拼成CSV格式的行写入 combined.write(','.join(row) + '\n') except ValueError: # 遇到非数值的面积值时跳过,也可以根据需求调整处理逻辑 print(f"跳过无效行:{row}") continue
关键说明
- 用
csv.reader自动分割每行成列列表,不用手动处理字符串分割的细节。 - 把两个过滤条件合并到一个循环,确保每一行都被检查。
- 加
try-except捕获数值转换异常,既解决了之前的类型错误,也让代码更健壮。 - 最后用
','.join(row) + '\n'把处理后的行还原成CSV格式写入目标文件。
这样修改后,应该就能得到你想要的结果啦~
内容的提问来源于stack exchange,提问作者Cödingers Cat
相关产品推荐
相关产品推荐

