按第一列分组对第三列求和并生成指定格式TXT文件的实现问题
问题解决方法
报错原因
你使用np.loadtxt直接读取文件报错是因为输入文件中包含>>>>>格式的非数值分隔行,numpy默认会尝试将所有行解析为数值,就会触发格式错误。
实现方案
方案1:纯Python实现(无需额外依赖)
无需安装numpy、pandas等第三方库,直接用Python内置功能处理:
from collections import defaultdict # 用字典存储第一列对应的第三列累加值 col_sum = defaultdict(float) with open("input.txt", "r", encoding="utf-8") as f: for line in f: line = line.strip() # 过滤空行和分隔符行 if not line or line.startswith(">>>>>"): continue cols = line.split() first_col = float(cols[0]) third_col = float(cols[2]) col_sum[first_col] += third_col # 按第一列升序排序后写入输出文件 with open("output.txt", "w", encoding="utf-8") as f: for key in sorted(col_sum.keys()): # 按要求格式写入,保留一位小数 f.write(f"{key:.1f} {col_sum[key]:.1f} 1.0\n")
方案2:Pandas实现(适合后续有其他数据处理需求)
如果已经安装了pandas,可以用分组聚合功能快速实现:
import pandas as pd valid_data = [] with open("input.txt", "r", encoding="utf-8") as f: for line in f: line = line.strip() if line and not line.startswith(">>>>>"): parts = list(map(float, line.split())) # 仅保留需要的第一列和第三列 valid_data.append((parts[0], parts[2])) # 构造DataFrame并分组求和 df = pd.DataFrame(valid_data, columns=["key", "value"]) res = df.groupby("key", as_index=False)["value"].sum() # 新增固定值为1.0的列 res["fixed"] = 1.0 # 写入文件,不输出表头和索引,空格分隔 res.to_csv("output.txt", sep=" ", header=False, index=False, float_format="%.1f")
两种方案运行后生成的output.txt内容都会完全符合你给出的预期结果。
内容的提问来源于stack exchange,提问作者manas
相关产品推荐
相关产品推荐

