Python实现:像素坐标的ADC值求和与重复次数统计
解决方案:处理像素CSV数据
方法一:用Pandas(推荐,高效简洁)
Pandas是处理表格数据的首选工具,能快速完成分组、聚合和补全操作。
import pandas as pd # 1. 读取CSV文件,替换为你的文件路径 df = pd.read_csv("your_data.csv") # 2. 过滤ADC列:根据需求保留TDC值 # 若ADC列是标识列(比如取值为"TDC"/"ADC"),用这行: # df_filtered = df[df["ADC"] == "TDC"] # 若ADC列是数值列且仅需保留含0的行(或所有行),直接用原数据: df_filtered = df # 3. 按像素坐标分组,计算能量总和与行数 grouped = df_filtered.groupby(["X", "Y"]).agg( total_energy=("Energy", "sum"), row_count=("X", "count") # 任意列计数均可 ).reset_index() # 4. 补全0-127的所有像素坐标(确保无缺失) all_pixels = pd.MultiIndex.from_product( [range(128), range(128)], names=["X", "Y"] ).to_frame(index=False) # 合并数据,缺失像素的能量和计数补0 final_result = pd.merge(all_pixels, grouped, on=["X", "Y"], how="left").fillna(0) final_result["row_count"] = final_result["row_count"].astype(int) # 5. 保存处理后的结果 final_result.to_csv("processed_result.csv", index=False)
方法二:纯Python实现(无需依赖第三方库)
如果无法安装Pandas,用原生Python字典也能完成需求:
from collections import defaultdict # 初始化字典存储每个像素的累计能量和行数 pixel_stats = defaultdict(lambda: [0.0, 0]) # 读取并处理CSV with open("your_data.csv", "r") as input_file: # 解析表头,获取各列索引 header = input_file.readline().strip().split(",") x_col = header.index("X") y_col = header.index("Y") adc_col = header.index("ADC") energy_col = header.index("Energy") for line in input_file: parts = line.strip().split(",") # 过滤ADC列:按需调整判断条件,示例保留所有行(含0值) # if parts[adc_col] == "TDC": # 若需按标识过滤,启用此行 x = int(parts[x_col]) y = int(parts[y_col]) energy = float(parts[energy_col]) pixel_stats[(x, y)][0] += energy pixel_stats[(x, y)][1] += 1 # 生成包含所有0-127像素的结果 with open("processed_result.csv", "w") as output_file: output_file.write("X,Y,total_energy,row_count\n") for x in range(128): for y in range(128): total_energy, row_count = pixel_stats.get((x, y), [0.0, 0]) output_file.write(f"{x},{y},{total_energy},{row_count}\n")
关键说明
- 过滤逻辑:如果ADC列是区分数据类型的标识列(比如有"TDC"和"ADC"两种取值),在代码中启用对应判断条件即可;如果ADC列是数值且仅需保留含0的行,可调整过滤条件为
df[df["ADC"] == 0]。 - 补全像素:代码会自动补充0-127范围内未出现的像素,确保结果覆盖所有预期坐标,缺失数据的能量和计数设为0。
- 结果输出:处理后的CSV包含
X、Y、total_energy(能量总和)、row_count(参与求和的行数)四列。
内容的提问来源于stack exchange,提问作者Patrycja
相关产品推荐
相关产品推荐

