如何用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
相关产品推荐
相关产品推荐

