Python新手求助:CSV文件两列数值比较结果异常问题
解决CSV两列数值对比全输出no的问题
以下是几个最可能的原因和对应的解决方法:
数据类型是字符串,不是数值
CSV默认读取的所有单元格内容都是字符串,直接用字符串对比数值会出错(比如"10" > "9"会返回False,因为字符'1'的ASCII码比'9'小)。必须把列值转换成整数或浮点数再对比。
示例代码:import csv # 替换成你的CSV文件名 with open('data.csv', 'r', encoding='utf-8') as csv_file: reader = csv.DictReader(csv_file) for row in reader: # 根据实际数据类型选int或float,比如带小数就用float val1 = int(row['列1名称']) val2 = int(row['列2名称']) # 这里替换成你的对比逻辑,比如val1 >= val2 print('yes' if val1 > val2 else 'no')列名不匹配
代码里写的列名和CSV实际列名可能有空格、大小写差异(比如代码里是'Score',CSV里是' score '),导致取到空值或错误数据,对比结果全为no。可以先打印所有列名确认:with open('data.csv', 'r') as f: reader = csv.DictReader(f) print(reader.fieldnames) # 输出实际列名列表或者读取时处理列名和值的空格:
val1 = int(row['列1名称'].strip()) val2 = int(row['列2名称'].strip())对比逻辑写反
比如你想判断第二列大于第一列,但代码里写的是if val1 > val2,结果自然和预期相反。可以先打印几行的原始值,验证逻辑:print(f"列1值: {row['列1名称']}, 列2值: {row['列2名称']}")数据含特殊字符
单元格里可能有隐藏字符、单位(比如"50%"、"123元"),导致转数值失败或得到错误结果。先打印原始行数据排查:print(row) # 输出整行数据,看是否有异常内容
内容的提问来源于stack exchange,提问作者Tomas Whelan
相关产品推荐
相关产品推荐

