如何将CSV文件指定字段的字符串转为浮点型并存储为列表?
问题排查与解决
原始需求
有如下格式的CSV文件:
id,type,inc,a,b 1,2,63376.799999999996,0.3061,187 2,1,58087.700000000004,0.3361,178 3,1,52699.9,0.3482,181 4,2,72964.8,0.3186,177 5,4,111589.79999999999,0.268,154 6,4,107618.0,0.2583,150 7,2,87109.2,0.3233,193 8,2,84669.59999999999,0.308,179 9,2,77258.4,0.3247,173
需要将inc、a、b字段的字符串值转为float类型,存入households列表,最后输出len(households)。
用户尝试的代码无输出:
import csv import scipy.optimize as opt def read_households(filename): households=[] fh = open("households.csv", 'r') reader = csv.DictReader(fh) #creates object 'reader' to read the file for hh in reader: reader[3,4,5] = float(reader[3,4,5]) households.append(hh) print("lines read:", len(households)) return(household)
错误点分析
- 参数未使用:函数接收
filename参数,但内部直接写死固定文件名,传入的参数无效。 - DictReader访问方式错误:
csv.DictReader返回的每一行是字典,需通过列名(如hh['inc'])访问,而非索引位置3,4,5,且不能直接对reader对象做索引赋值。 - return位置错误:
return语句放在for循环内部,第一次循环就直接返回,无法遍历所有行;且返回变量名household拼写错误(应为households)。 - 未调用函数:代码仅定义了函数,没有执行调用逻辑,自然无输出。
修正后的代码
import csv def read_households(filename): households = [] # 使用with语句自动关闭文件,避免资源泄漏 with open(filename, 'r') as fh: reader = csv.DictReader(fh) for hh in reader: # 转换指定字段为float类型 hh['inc'] = float(hh['inc']) hh['a'] = float(hh['a']) hh['b'] = float(hh['b']) households.append(hh) # 循环结束后返回列表 return households # 调用函数并输出结果 households_list = read_households("households.csv") print("lines read:", len(households_list))
运行结果
执行后会输出:
lines read: 9
内容的提问来源于stack exchange,提问作者Anano Mikadze
相关产品推荐
相关产品推荐

