gpt4 book ai didi

python - 使用 Numpy 查找数据集的平均值,其中包含一些缺失数据

转载 作者:太空狗 更新时间:2023-10-30 01:10:37 25 4
gpt4 key购买 nike

我有几个(大约 10 个)CSV 格式的数据集。数据集的每一列代表正在运行的系统的一个方面(可用 RAM、CPU 使用率、打开的 TCP 连接等)。每行包含这些列在某一时刻的值。

数据集是在同一测试的单独运行期间捕获的。不保证每个数据集中的行数相同(即:某些测试运行的时间比其他测试长)。

我想生成一个新的 CSV 文件,该文件代表给定时间偏移和给定列的所有数据集的“平均”值。理想情况下,一个数据集中缺失的值将被忽略。但是,如有必要,可以假设缺失值与最后一个已知值相同,或者该行的已知值的平均值。

一个简化的例子:

+---------------+    +---------------+       +---------------+
| Set 1 | | Set 2 | | Average |
+---+-----+-----+ +---+-----+-----+ +---+-----+-----+
| t | A | B | | t | A | B | | t | A | B |
+---+-----+-----+ +---+-----+-----+ +---+-----+-----+
| 1 | 10 | 50 | | 1 | 12 | 48 | | 1 | 11 | 49 |
| 2 | 13 | 58 | | 2 | 7 | 60 | | 2 | 10 | 59 |
| 3 | 9 | 43 | | 3 | 17 | 51 | => | 3 | 13 | 47 |
| 4 | 14 | 61 | | 4 | 12 | 57 | | 4 | 13 | 59 |
| : | : | : | | : | : | : | | : | : | : |
| 7 | 4 | 82 | | 7 | 10 | 88 | | 7 | 7 | 86 |
+---+-----+-----+ | 8 | 15 | 92 | | 8 | 15 | 92 |
| 9 | 6 | 63 | | 9 | 6 | 63 |
+---+-----+-----+ +---+-----+-----+

我是 numpy 的新手,专门为这个项目选择了它。最好的方法是什么?对于具有相同行数的数据集(我一直通过缩短较长的数据集来强制这样做),我只是这样做:

d_avg = sum(dsets) / float(len(dsets))

其中“dsets”是包含来自每个 CSV 文件的数据的 ndarray 列表。这很好用,但我不想丢弃较长运行的数据。

我还可以将较短的运行调整为最长的长度,但所有新字段都填充了“NoneType”。添加(例如) float 和 NoneType 时,稍后的操作会出错。

有什么建议吗?

最佳答案

为什么不只使用 numpy 的 ma(屏蔽数组)模块?

maxLen = reduce(lambda a,b : max(a, b.shape[0]),
dSets, 0)
all = N.ma.zeros((maxLen,)+ dSets[0].shape[1:] + (len(dSets),),
dtype=float) # set the dtype to whatever
all.mask = True
for i, set in enumerate(dSets):
all.mask[:len(set),...,i] = False
all[:len(set),...,i] = set

mean = all.mean(axis=-1)

当然,这只有在您可以保证所有数组的每一行中的时间都相同时才有效,即 set[i,0] == set[j,0] for all i,j

关于python - 使用 Numpy 查找数据集的平均值,其中包含一些缺失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com