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

如何用Python读取文件夹中多CSV文件并计算指定列的总和与平均值

解决读取多CSV文件并计算指定列总和与平均值的问题

你的代码核心问题在于:file.readlines()返回的是字符串列表,不是DataFrame对象,因此无法调用.columns或['A'].sum()这类仅属于DataFrame的方法。下面给出两种可行的解决方案:


方案一:使用Pandas(简洁高效,推荐)

Pandas是处理表格数据的专用库,能轻松读取CSV并完成计算:

import os
import pandas as pd

folder_path = r'folder\path'
total_sum = 0
file_count = 0

for file_name in os.listdir(folder_path):
    if file_name.endswith('.csv'):
        file_path = os.path.join(folder_path, file_name)
        # 读取CSV文件,自动识别表头
        df = pd.read_csv(file_path)
        # 取第一列求和(iloc[:,0]适用于无表头或表头未知的情况)
        column_sum = df.iloc[:, 0].sum()
        total_sum += column_sum
        file_count += 1
        print(f'Sum for {file_name}: {column_sum}')

# 避免无CSV文件时除以0的错误
if file_count > 0:
    average = total_sum / file_count
    print(f'Average of all sums: {average}')
else:
    print('No CSV files found in the folder.')

说明:

  • 如果你的CSV第一列有明确列名(比如"A"),可以把df.iloc[:, 0]替换成df['A']
  • 运行前确保已安装Pandas:pip install pandas

方案二:纯Python实现(无需额外库)

如果不想安装第三方库,可手动解析CSV内容:

import os

folder_path = r'folder\path'
total_sum = 0
file_count = 0

for file_name in os.listdir(folder_path):
    if file_name.endswith('.csv'):
        file_path = os.path.join(folder_path, file_name)
        column_sum = 0
        with open(file_path, 'r') as file:
            # 跳过表头(如果CSV没有表头,注释掉此行)
            next(file)
            for line in file:
                line = line.strip()
                if not line:
                    continue
                # 按逗号分割行,取第一个元素并转整数
                try:
                    value = int(line.split(',')[0])
                    column_sum += value
                except (IndexError, ValueError):
                    # 处理格式错误的行,避免程序崩溃
                    print(f'Skipping invalid line in {file_name}: {line}')
        total_sum += column_sum
        file_count += 1
        print(f'Sum for {file_name}: {column_sum}')

if file_count > 0:
    average = total_sum / file_count
    print(f'Average of all sums: {average}')
else:
    print('No CSV files found in the folder.')

说明:

  • 加入了异常处理,能跳过格式错误的行
  • 如果CSV没有表头,删除next(file)这一行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:50:04