将ROOT文件读取到数据帧:比root_numpy的tree2array慢化rootroot

时间:2020-06-14 10:17:56

标签: uproot

我正在尝试将我的平面根节点转换为数据帧(通过数组)。目前,我正在使用root_numpy,并希望使用uproot以避免任何ROOT依赖关系。

我有一个名为vars_to_save的20个变量的字符串名称列表(从树中的104个变量中保存)。

在root_numpy中,我使用:

rootFile = ROOT.TFile(f)
intree = rootFile.Get(tree_name)
arr = tree2array(intree,branches=vars_to_save) 
df_root_numpy = pd.DataFrame(arr)

大约需要2秒(用于491176个事件和字符串列表vars_to_save中的20个变量)

在连根拔起我已经尝试过:

#attempt 1
tree = uproot.open(f)[tree_name]
df_uproot = tree.pandas.df(vars_to_save) 

#attempt 2 
tree = uproot.open(f)[tree_name]
df_uproot = tree.arrays(vars_to_save, outputtype=pd.DataFrame)

#attempt 3
tree = uproot.open(f)[tree_name]
arr = tree.arrays(vars_to_save)
df_uproot = pd.DataFrame(arr)[vars_to_save]

每次耗时约45秒(慢20倍左右)。在尝试3中,我注意到tree.arrays()步骤是最慢的步骤,大约需要40秒。

根目录中是否有办法加快此操作?

0 个答案:

没有答案