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

未完整导入CSV到内存计算年龄时遇TypeError错误求助

错误原因与修复方案

核心错误

你代码里的data['birth_year']是完全错误的用法:csv.reader返回的是一个迭代器,每次迭代出来的row是列表(按列顺序排列的字段值),不是字典,既不能直接对data对象做下标访问,也不能用列名来取列表里的元素。同时你写反了生成器的逻辑,应该先遍历data里的每一行row,再对row做操作。

两种修复方式

方式一:改用csv.DictReader(推荐,更直观)

DictReader会自动把每一行转换成字典,键就是表头的字段名,直接用列名取值即可,完全不用关心列的位置:

import csv
import statistics

def median_age(filename):
    with open(filename, 'r') as file:
        # 用DictReader处理,自动映射表头与字段值
        data = csv.DictReader(file, delimiter='\t')
        
        # 遍历每一行字典,按列名获取birth_year计算年龄
        customer_age = (2024 - int(row['birth_year']) for row in data)
        
        median_customer_age = statistics.median(customer_age)
        return median_customer_age

方式二:继续用csv.reader,按列索引取值

如果你知道birth_year在表头后的第几列(比如是第2列,索引从0开始就是1),可以直接用列表下标访问:

import csv
import statistics

def median_age(filename):
    with open(filename, 'r') as file:
        data = csv.reader(file, delimiter='\t')
        next(data)  # 跳过表头行
        
        # 按索引取对应列的值,这里假设birth_year在第2列(索引1)
        customer_age = (2024 - int(row[1]) for row in data)
        
        median_customer_age = statistics.median(customer_age)
        return median_customer_age

额外说明

两种方案都保留了生成器的特性——不会把整个CSV文件加载到内存,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Lanxin Ma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:28