【发布时间】:2009-11-21 19:32:54
【问题描述】:
我有几个(大约 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”填充。之后的操作会在添加(例如)浮点数和 NoneType 时出错。
有什么建议吗?
【问题讨论】:
-
我认为第 7 行的平均值是错误的
-
我知道我会错过其中一排!已更新。