讲师中心 微信公众号
AI工具推荐 视频效率加速

Python中处理CSV数据并计算指定列平均值的教程(不使用Pandas)

云涛吖_5965

云涛吖_5965

发布时间:2025-09-26 14:13:15

|

965人浏览过

|

来源于php中文网

原创

python中处理csv数据并计算指定列平均值的教程(不使用pandas)

本教程旨在指导Python初学者,如何在不依赖Pandas库的情况下,从CSV文件中读取数据并计算特定数值列的平均值。文章重点解决常见的IndexError问题,通过介绍正确的列表初始化方法和数据解析策略,确保代码的健壮性和可扩展性,即使数据行数或列数发生变化也能正常工作。

在Python中处理CSV(或类似表格)数据并计算特定列的平均值是一个常见的任务。对于习惯C语言等静态类型语言的开发者来说,Python列表(list)的动态特性有时会带来困惑,尤其是在尝试修改尚未存在的列表元素时,容易遇到IndexError: list index out of range。本教程将详细阐述如何正确地实现这一功能,并提供一个健壮的代码示例。

理解 IndexError 的根源

当我们在Python中创建一个空列表 averages = [] 后,如果尝试通过索引直接对其元素进行赋值或累加,例如 averages[i] += value,Python会因为该索引 i 处没有元素而抛出 IndexError。列表的索引只能用于访问或修改 已存在的 元素。要向列表中添加新元素,应该使用 append() 方法;而要对特定位置的元素进行累加操作,则必须确保该位置的元素已经存在。

核心解决方案:列表预初始化

解决 IndexError 的关键在于,在进行累加操作之前,预先初始化 averages 列表,使其包含足够数量的元素(通常是0),以对应需要计算平均值的列数。

假设我们有 N 列需要计算平均值,正确的初始化方式是:

立即学习“Python免费学习笔记(深入)”;

Knowledge Graph - Csv Graph Loader Generator
Knowledge Graph - Csv Graph Loader Generator

从 CSV 数据集生成图数据库加载器和三元组映射。将表格 CSV 数据转换为图数据库可直接使用的节点、边和三元组。

下载
num_columns_to_average = N
averages_sum = [0.0] * num_columns_to_average # 使用浮点数0.0,避免后续类型转换问题

这样,averages_sum 列表就会被创建为 [0.0, 0.0, ..., 0.0],其中包含 N 个0.0,从而允许我们通过 averages_sum[i] += value 的方式安全地进行累加。

实现步骤与代码示例

我们将通过一个具体的例子来演示如何从一个类似CSV的文件中读取数据,并计算指定数值列的平均值。假设我们的数据文件 RADIOLOGY.csv 格式如下(第一行是标题,第一列是序号,后续是数值数据):

Sr    JAN FEB MAR APR
1   2317    5327    997 986
2   2605    5617    1085    1105
...

1. 文件读取与数据解析

首先,我们需要打开并读取文件。由于本例中数据是空格分隔的,我们可以使用 file.readlines() 读取所有行,然后对每行使用 split() 方法进行解析。

import os

# 模拟文件内容,实际应用中会从文件中读取
# 为了教程的独立性,这里使用字符串数据
DATA_CONTENT = """Sr    JAN FEB MAR APR
1   2317    5327    997 986
2   2605    5617    1085    1105
3   2364    5490    1061    998
4   2975    6236    1129    1164
5   2766    5877    1206    1104
6   2762    6058    1295    908
7   3020    6602    1274    1089
8   2576    5644    1091    1041
9   3329    6643    1396    1130
10  2989    6284    1330    1192
"""

def read_data_from_string(data_string):
    """
    从字符串中读取数据行,并去除空行。
    在实际应用中,这里会替换为文件读取逻辑。
    """
    return [line.strip() for line in data_string.split('\n') if line.strip()]

def compute_column_averages(data_lines):
    """
    计算给定数据行中数值列的平均值。
    假设:
    1. 第一行是标题行。
    2. 第一列是标识符(不参与平均值计算)。
    3. 后续列是需要计算平均值的数值数据。
    4. 数据以空格分隔。
    """
    if not data_lines:
        return [], 0, []

    # 解析标题行以确定列数
    headers = data_lines[0].split()
    # 需要计算平均值的列数 = 总列数 - 1 (减去标识符列)
    # 注意:这里假设标题行和数据行有相同的列数结构
    num_columns_to_average = len(headers) - 1

    # 预初始化平均值累加器,所有元素设为0.0
    averages_sum = [0.0] * num_columns_to_average

    # 记录实际参与计算的行数
    data_row_count = 0

    # 遍历数据行,跳过标题行 (data_lines[1:])
    for row_index, line in enumerate(data_lines[1:]):
        values_str = line.split()

        # 确保行有足够的列
        # 需要的列数是 num_columns_to_average (数据列) + 1 (标识符列)
        if len(values_str) < num_columns_to_average + 1:
            print(f"警告: 第 {row_index + 2} 行数据不完整,跳过。内容: '{line}'")
            continue

        # 遍历需要计算平均值的列(从第二个元素开始,即索引1)
        for col_idx in range(num_columns_to_average):
            try:
                # values_str[col_idx + 1] 是实际的数值列
                averages_sum[col_idx] += float(values_str[col_idx + 1])
            except ValueError:
                print(f"警告: 第 {row_index + 2} 行第 {col_idx + 2} 列 '{values_str[col_idx + 1]}' 不是有效数字,跳过此值。")
                # 如果遇到非数字值,我们选择跳过该值,但仍将该行计入总行数
                # 实际应用中可能需要更复杂的策略,例如跳过整行或用0填充
                continue 

        data_row_count += 1 # 只有有效数据行才计入总行数

    # 计算最终平均值
    final_averages = []
    if data_row_count > 0:
        for i in range(num_columns_to_average):
            final_averages.append(averages_sum[i] / data_row_count)
    else:
        print("没有足够的有效数据行来计算平均值。")

    return final_averages, num_columns_to_average, headers[1:] # 返回平均值列表、列数和对应的标题

def main_driver():
    # 1. 读取数据
    # 实际文件读取示例:
    # file_path = "RADIOLOGY.csv"
    # try:
    #     with open(file_path, 'r', encoding='utf-8') as f:
    #         data_lines = read_data_

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

320

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

651

2026.04.13

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

598

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1476

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

2684

2025.09.12

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

40

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn