处理大型.asc文件的最快方法是什么?

时间:2019-11-20 21:12:10

标签: python pandas canoe

我目前有从CANoe生成的.asc日志文件。我正在使用python分析这些文件。这些文件很大(从.5GB-2GB到任何地方)。要读取/分析数据,我正在将数据转换为数据帧,并使用以下代码行来做到这一点:

    log=can.ASCReader(filePath)
    log=[*log]
    df_data = [{'timestamp':m.timestamp, 'data':m.data} for m in log]
    df = pd.DataFrame(df_data)

通过我的分析,花费时间最长的部分是将迭代器转换为列表。我想知道是否有更有效的方法。如果速度更快,我也愿意以全新的方式进行整个过程。当前.6gb .asc文件运行大约需要19分钟。任何帮助/建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

最耗时的部分是最有可能从磁盘读取。这是无法避免的。

但是,您可以确保不要将不必要的数据放入内存或将其复制。

尝试以下操作:

import operator
log=can.ASCReader(filePath)
pd.DataFrame(data=map(operator.attrgetter('timestamp', 'data'), log))

ASCReader将返回一个迭代器,即直到使用log才读取数据。

由于您只对timestampdata后面的值感兴趣,因此我们为这两个属性声明和 attrgetter 。该函数需要一个对象,并且仅返回该对象的两个给定属性。

为了将此属性应用于日志,我们将使用mapmap将把属性应用于log的每个元素。 map还会返回一个迭代器,即它将在使用之前不会读取和存储任何数据。

最后,我们将地图放入熊猫中,作为构建DataFrame的数据源。

这样做应该是在最少的数据周围复制或处理不必要的数据的方法。 YMMV