我正在处理一个包含3列的csv文件,看起来像这样:
timeStamp, value, label
15:22:57, 849, CPU pid=26298:percent
15:22:57, 461000, JMX MB
15:22:58, 28683, Disks I/O
15:22:58, 3369078, Memory pid=26298:unit=mb:resident
15:22:58, 0, JMX 31690:gc-time
15:22:58, 0, CPU pid=26298:percent
15:22:58, 503000, JMX MB
字符串label
列包含不同的值(例如总共5个),其中包括空格、冒号和其他特殊字符。
我试图实现的是根据每个指标绘制时间(无论是在同一个图上还是在不同的图上)。我可以用matplotlib
做到这一点,但我首先需要根据“标签”对[timeStamps, value]
进行分组。
我查看了csv.DictReader
以获取标签,并通过“标签”对itertools.groupby
进行分组,但我正在努力以适当的“Python”方式做到这一点。
有什么建议吗?
3条答案
按热度按时间gblwokeq1#
您不需要
groupby
;您希望使用collections.defaultdict
来收集一系列由标签键控的[timestamp, value]
对:字符串
现在,
per_label
是一个字典,标签作为键,[timestamp, value]
对列表作为值;我去掉了空白(输入示例中有很多多余的空白),并将value
列转换为浮点数。对于您的(有限的)输入样本,结果为:
型
bakd9h0s2#
你可以尝试pandas,它提供了一个很好的数据处理结构。
将csv读取到
DataFrame
字符串
将
DataFrame
按label
分组型
现在你可以得到你想要的了
型
htrmnn0y3#
可以使用
numpy.loadtxt
:字符串
这将把你的表加载到一个结构化数组中,其中时间保存为8个字符的字符串('S8'),值保存为无符号整数,标签保存为最多33个字符的字符串('S33',你可能需要调整这个大小)。然后你可以按类型索引你的值:
型
并根据标签进行过滤,如果您需要:
型
要将时间从字符串转换为浮点数,可以使用
pylab
的datedatestr2num
并将其作为loadtxt
的转换器:型