【发布时间】:2019-11-19 15:15:17
【问题描述】:
在 Geant4 中使用输出 .root 文件的模拟,我很高兴发现了 uproot 包。
相信数据帧是我特定分析任务的最佳选择,我使用 uproot.pandas.df() 将 TTree 中的内容读入这样的数据帧。
不幸的是,这成为了瓶颈。虽然代码可以很好地处理所有数字输入,但处理字符串似乎是一个严重的问题。该文件很大,生成的帧有 2406703 行。
虽然此代码(Egamma 和 z_eu 均为数字):
df = uproot.open('rootFile.root')['seco_tuple;1].pandas.df( ['Egamma','z_eu'])
平均需要 430 毫秒,包括已经包含字符串的一列:
df = uproot.open('rootFile.root')['seco_tuple;1].pandas.df( ['Name','Egamma','z_eu'])
将时间增加到近 3.5 秒。有一个带有字符串的第二列会使时间加倍。我还尝试过读取字典中的数据,然后将其传递给数据框。读取数据相当快,但将其传递到数据帧然后又很慢。
由于字符串显然会导致代码占用更多资源,所以我想知道字符串通常是否是数据帧的问题,或者这里的特定类型的字符串可能会有所不同?
我希望在这里得到一些进一步的了解,并可以尝试提供.root 文件以及 MWE,以防需要。
提前致谢!
【问题讨论】: