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

Python读取CSV文件调用mean函数报'mean requires at least one data point'排查

报错原因排查

直接报错原因

你触发的statistics.StatisticsError: mean requires at least one data point错误,本质是调用mean()时传入的diff数组为空,没有有效数据可以计算平均值。

根因分析

  • csv.reader是迭代器类型,只能遍历一次,遍历完成后指针会停在文件末尾,再次遍历不会返回任何数据
  • 你代码存在两个逻辑问题导致diff为空:
    • 多余的外层for row in csvreader:循环:外层循环先消耗了csvreader的第一行数据,之后内层的amounts = [int(row[1]) for row in csvreader]会把剩余迭代器内容全部扫完,等外层第二次循环时迭代器已经为空,amounts会变成空数组,最终生成的diff自然为空
    • 你注释的月份计算逻辑和金额计算逻辑是两次独立遍历迭代器:如果放开注释的月份计算代码,迭代器会被第一次遍历耗尽,后续的金额计算逻辑拿到的就是空数组,这就是你分开注释两部分代码都能正常运行,合在一起就报错的核心原因

修复方案

你不需要套外层的for循环,且只需要遍历一次csvreader同时存储月份和金额即可,修正后代码如下:

import csv
from statistics import mean
PyBank_file=r"PyBank\Resources\budget_data.csv"

with open(PyBank_file, 'r') as csvfile:
    csvreader=csv.reader(csvfile,delimiter=',')
    # 如果你的csv文件没有表头,可删除下面这行跳过表头的代码
    next(csvreader)
    # 一次遍历同时存储月份和金额,避免多次消耗迭代器
    months = []
    amounts = []
    for row in csvreader:
        months.append(row[0])
        amounts.append(int(row[1]))
    
    Total_Months=len(months)
    Total_Profits_Losses=sum(amounts)
    diff=[amounts[i+1]-amounts[i] for i in range(len(amounts)-1)]
    Average=mean(diff)
    Greatest_Increase=max(diff)
    Greatest_Decrease=min(diff)
    print(Total_Months)
    print(Total_Profits_Losses)
    print(Average)
    print(Greatest_Increase)
    print(Greatest_Decrease)

内容的提问来源于stack exchange,提问作者Nazih B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:39:01