【发布时间】:2020-03-16 17:00:08
【问题描述】:
我目前有从 CANoe 生成的 .asc 日志文件。我正在使用 python 来分析这些文件。这些文件非常大(从 0.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 分钟。任何帮助/建议将不胜感激!
【问题讨论】:
-
函数DataFrame()有什么作用?如果可以重写它以获取迭代器,那将消除转换。
-
@LeeDanielCrocker pd.DataFrame 将字典列表转换为数据框。 pandas.pydata.org/pandas-docs/stable/reference/api/…
-
你在说哪一行?您的示例代码中的第 2 行是否需要这么长时间?为什么会有这条线?
-
@M.Spiller 是的,第二行需要这么长时间。我这样做是为了将迭代器转换为列表,以便创建字典列表以转换为数据框表。
-
但在第 3 行中,您只是在遍历列表。为什么不直接遍历从第 1 行返回的迭代器?