You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何存储浮点元组到文件并读取计算每列均值?问题解决与优化

优化存储方案与数据读取均值计算解决办法

一、更优存储方案推荐

1. CSV格式(通用兼容,推荐)

CSV是结构化文本格式,跨语言/工具都能解析,用pandas或csv模块读写都很便捷,完美适配后续的均值计算需求。

写入代码(两种方式选其一):

  • 用pandas直接转DataFrame保存:
import pandas as pd

# stats是收集好的(add_score, keep_score, del_score)元组列表
df = pd.DataFrame(stats, columns=["add_score", "keep_score", "del_score"])
df.to_csv("./resources/outputs/generate/stats.csv", index=False)
  • 用标准库csv模块写入:
import csv

with open("./resources/outputs/generate/stats.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["add_score", "keep_score", "del_score"])  # 写入表头
    writer.writerows(stats)  # 批量写入所有数据

读取并计算均值:

import pandas as pd

df = pd.read_csv("./resources/outputs/generate/stats.csv")
# 直接计算各列均值
add_mean = df["add_score"].mean()
keep_mean = df["keep_score"].mean()
del_mean = df["del_score"].mean()

print(f"add_score均值: {add_mean:.4f}")
print(f"keep_score均值: {keep_mean:.4f}")
print(f"del_score均值: {del_mean:.4f}")

2. Pickle格式(Python专属,高效序列化)

如果只在Python环境中读写,Pickle是最优选择——直接序列化Python对象,读写速度快,无需额外解析。

写入代码:

import pickle

with open("./resources/outputs/generate/stats.pkl", "wb") as f:
    pickle.dump(stats, f)

读取并计算均值:

import pickle
import pandas as pd

with open("./resources/outputs/generate/stats.pkl", "rb") as f:
    stats = pickle.load(f)

df = pd.DataFrame(stats, columns=["add_score", "keep_score", "del_score"])
# 计算均值逻辑同CSV方案
add_mean = df["add_score"].mean()
# ... 其余均值计算同理

3. Numpy NPY格式(数值型数据高效存储)

如果所有分数都是数值类型,用Numpy的NPY格式存储,内存占用小,计算均值时无需转DataFrame,直接用Numpy原生方法即可。

写入代码:

import numpy as np

stats_np = np.array(stats)
np.save("./resources/outputs/generate/stats.npy", stats_np)

读取并计算均值:

import numpy as np

stats_np = np.load("./resources/outputs/generate/stats.npy")
# axis=0表示按列计算均值
means = np.mean(stats_np, axis=0)
print(f"add_score均值: {means[0]:.4f}")
print(f"keep_score均值: {means[1]:.4f}")
print(f"del_score均值: {means[2]:.4f}")

二、现有文本文件的兼容处理方案

如果无法重新生成文件,需要直接处理现有stats.txt,可以通过字符串解析将每行的元组格式转为数值列表,再转DataFrame计算均值:

import pandas as pd

data = []
with open("./resources/outputs/generate/stats.txt", "r") as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        # 移除括号并分割数值字符串
        num_strs = line.strip("()").split(",")
        # 转换为float类型
        add = float(num_strs[0].strip())
        keep = float(num_strs[1].strip())
        delete = float(num_strs[2].strip())
        data.append([add, keep, delete])

df = pd.DataFrame(data, columns=["add_score", "keep_score", "del_score"])
# 计算均值
add_mean = df["add_score"].mean()
keep_mean = df["keep_score"].mean()
del_mean = df["del_score"].mean()

内容的提问来源于stack exchange,提问作者resei09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:25:13