1

我正在尝试将我的平面 ROOT ntuples 转换为数据帧(通过数组)。目前,我正在使用 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 秒。

有没有办法根除以加快此操作?

4

0 回答 0