如何用Python(Pandas/CSV库)将XYZV CSV转换为XYV并求电压均值?
用Python处理CSV数据:按X、Y分组求Voltage平均值
方法一:使用Pandas(推荐,简洁高效)
Pandas的groupby+mean()组合可以快速实现需求,步骤清晰易维护:
import pandas as pd # 读取原始CSV(根据实际分隔符调整参数:空格分隔用delim_whitespace=True,逗号分隔则去掉该参数) df = pd.read_csv('data.csv', delim_whitespace=True) # 按X、Y分组,计算Voltage(示例中为V列)的平均值 result_df = df.groupby(['X', 'Y'])['V'].mean().reset_index() # 保留三位小数(匹配示例结果格式,可按需调整) result_df['V'] = result_df['V'].round(3) # 保存处理后的数据到新CSV result_df.to_csv('processed_data.csv', index=False, sep='\t') # 打印验证结果 print(result_df)
运行后会输出与示例一致的结果:
X Y V 0 1.0 0.0 5.333 1 1.0 1.0 1.000
方法二:使用Python标准库csv(无第三方依赖)
如果不想引入Pandas,可以用标准库手动实现分组统计:
import csv from collections import defaultdict # 用字典存储分组数据:键为(X,Y)元组,值为[总电压值, 数据计数] group_stats = defaultdict(lambda: [0.0, 0]) # 读取原始CSV(分隔符按实际情况调整,示例为制表符) with open('data.csv', 'r') as infile: reader = csv.DictReader(infile, delimiter='\t') for row in reader: x = float(row['X']) y = float(row['Y']) v = float(row['V']) key = (x, y) group_stats[key][0] += v group_stats[key][1] += 1 # 计算平均值并整理输出数据 output_data = [['X', 'Y', 'V']] for (x, y), (total_v, count) in group_stats.items(): avg_v = round(total_v / count, 3) output_data.append([x, y, avg_v]) # 写入处理后的CSV with open('processed_data.csv', 'w', newline='') as outfile: writer = csv.writer(outfile, delimiter='\t') writer.writerows(output_data) # 打印验证结果 for row in output_data[1:]: print(f"{row[0]}\t{row[1]}\t{row[2]}")
内容的提问来源于stack exchange,提问作者Confused_scientist
相关产品推荐
相关产品推荐

