You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:55:28