在 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,以防需要。
提前致谢!