我正在尝试将我的平面根节点转换为数据帧(通过数组)。目前,我正在使用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秒。
根目录中是否有办法加快此操作?