如何编写代码批量计算任意多列均值并输出至CSV文件
嘿,我来帮你搞定批量计算各探头每日均值的需求!下面给你两种实用的实现方案,你可以根据自己的技术栈和数据情况选择:
方案一:使用Python标准库
csv 模块 如果不想额外安装第三方库,用Python自带的csv模块就能搞定,代码逻辑清晰,适合理解底层流程:
import csv def calculate_daily_averages(input_file, output_file): # 读取输入文件的所有数据 with open(input_file, 'r', newline='') as infile: reader = csv.reader(infile) # 提取表头(也就是各个探头的名称) probe_names = next(reader) # 读取所有行的原始数据 raw_data = list(reader) # 将字符串格式的数值转为浮点型,方便计算 numeric_data = [] for row in raw_data: try: numeric_row = [float(val) for val in row] numeric_data.append(numeric_row) except ValueError: # 如果遇到非数值的单元格,可以选择跳过该行或者做其他处理 print(f"跳过包含非数值的行:{row}") # 批量计算每一列的均值 probe_averages = [] for col_idx in range(len(probe_names)): # 提取当前探头的所有采集数据 probe_values = [row[col_idx] for row in numeric_data] # 计算均值(确保数据不为空) if probe_values: avg = sum(probe_values) / len(probe_values) probe_averages.append((probe_names[col_idx], round(avg, 2))) # 保留两位小数 else: probe_averages.append((probe_names[col_idx], None)) # 空数据标记为None # 将结果写入输出CSV with open(output_file, 'w', newline='') as outfile: writer = csv.writer(outfile) # 写入结果表头 writer.writerow(['探头名称', '每日平均值']) # 批量写入所有探头的均值 writer.writerows(probe_averages) # 替换成你的输入输出文件路径,直接调用函数即可 calculate_daily_averages('your_input_data.csv', 'daily_probe_averages.csv')
代码说明:
- 先读取输入文件的表头和所有数据,把字符串转成数值类型
- 遍历每一列(对应每个探头),提取该列所有数据计算均值
- 处理了可能的非数值行,避免程序报错
- 最后把探头名称和对应均值批量写入新的CSV文件
方案二:使用
pandas 库(推荐,代码更简洁) 如果可以安装第三方库,pandas处理表格数据效率极高,几行代码就能完成批量计算:
首先需要安装pandas(如果还没装):
pip install pandas
然后是核心代码:
import pandas as pd # 读取输入CSV,默认第一行是表头(探头名称) df = pd.read_csv('your_input_data.csv') # 批量计算每列的均值,axis=0表示按列计算;忽略缺失值 daily_avg = df.mean(axis=0, skipna=True).reset_index() # 重命名列名,让输出更清晰 daily_avg.columns = ['探头名称', '每日平均值'] # 将结果写入CSV,index=False表示不写入行索引 daily_avg.to_csv('daily_probe_averages.csv', index=False, float_format='%.2f')
代码说明:
pd.read_csv直接读取整个表格数据,无需手动处理行和列mean(axis=0)一键计算所有列的均值,自动忽略缺失值- 最后用
to_csv直接输出结果,还能指定数值格式(比如保留两位小数)
额外注意事项:
- 确保输入文件路径正确,如果文件不在代码同目录,要写完整的绝对路径
- 如果数据中有大量缺失值,可以先通过
df.dropna()清理无效行,或者在计算时调整参数 - 两种方案都支持任意数量的探头列,不管你有多少个探头,都能批量处理
内容的提问来源于stack exchange,提问作者Chayan Lahiri
相关产品推荐
相关产品推荐

