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

Python零导入无库处理CSV:计算指定列的最大值、最小值、平均值

原生Python无第三方库处理CSV计算列统计值方案

功能说明

无需导入任何第三方库,仅用Python原生语法即可实现CSV指定列的最大值、最小值、平均值计算,支持两种输出形式。

现有代码问题修复

你提供的现有代码存在两处核心逻辑错误,可直接参考下方完整实现:

  • 缩进错误:rows.append(row) 放置在列循环内部,导致同一行数据被重复追加
  • 统计逻辑错误:固定取第一列计算最值,无法匹配多列或指定列统计需求

实现代码

第一种输出:直接打印指定列统计结果

# 可按需修改目标列名和CSV路径
target_column = "TASK1"
csv_file_path = "file.csv"

with open(csv_file_path, "r", encoding="utf-8") as f:
    # 匹配目标列索引
    headers = f.readline().strip().split(",")
    if target_column not in headers:
        raise ValueError(f"不存在列:{target_column}")
    col_index = headers.index(target_column)
    
    # 收集目标列所有数值
    value_list = []
    for line in f:
        line = line.strip()
        if not line:
            continue
        columns = line.split(",")
        value_list.append(int(columns[col_index]))

# 计算统计值
max_value = max(value_list)
min_value = min(value_list)
avg_value = sum(value_list) / len(value_list)

# 输出结果示例
print(f"Average of {target_column} is {avg_value}")
# 如需输出最值可取消注释下方代码
# print(f"Max of {target_column} is {max_value}")
# print(f"Min of {target_column} is {min_value}")

运行后输出效果:

Average of TASK1 is 60.4

第二种输出:原CSV末尾追加统计行

csv_file_path = "file.csv"
# 可按需增删要展示的统计项,示例仅保留平均值
stat_items = ["AVG"]

with open(csv_file_path, "r", encoding="utf-8") as f:
    # 读取原文件所有内容
    origin_lines = [line.strip() for line in f if line.strip()]
    headers = origin_lines[0].split(",")
    # 需统计的数值列总数(跳过第一列ID)
    stat_col_total = len(headers) - 1

    # 收集所有数值列数据
    column_values = [[] for _ in range(stat_col_total)]
    for line in origin_lines[1:]:
        cols = line.split(",")
        for i in range(stat_col_total):
            column_values[i].append(int(cols[i+1]))

# 生成统计行
stat_rows = []
for item in stat_items:
    row = [item]
    for idx in range(stat_col_total):
        if item == "AVG":
            avg = sum(column_values[idx])/len(column_values[idx])
            # 保留1位小数,和示例输出格式对齐
            row.append(f"{avg:.1f}" if avg %1 !=0 else f"{int(avg)}")
        elif item == "Max":
            row.append(f"{max(column_values[idx])}")
        elif item == "Min":
            row.append(f"{min(column_values[idx])}")
    # 补全空列保证格式对齐
    row += [""]*(len(headers)-len(row))
    stat_rows.append(",".join(row))

# 合并输出原内容+统计行
result = "\n".join(origin_lines + stat_rows)
print(result)
# 如需覆盖写入原文件,可取消下方注释
# with open(csv_file_path, "w", encoding="utf-8") as f:
#     f.write(result)

运行后输出效果:

ID,TASK1,TASK2,QUIZ1,QUIZ2
11061,50,75,50,78
11062,70,80,60,50
11063,60,75,77,79
11064,52,85,50,80
11065,70,85,50,80
AVG,60.4,80.0,57.4,73.4

如果仅需要TASK1列的统计值,其余留空,可修改生成统计行的逻辑,仅给对应索引位置赋值即可。

内容的提问来源于stack exchange,提问作者FAISHAL YUSUF BAQIR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:03