1

我正在尝试使用dask. 我最初以这种方式将我的 ROOT 文件读uproot入 a pandas.DataFrame

import uproot

file_name = "ntuple.root"
tree_name = "Events"
branches = ["Trigger", "nTracks", "mass"]
df = uproot.open(file_name)[tree_name].pandas.df(branches)
df.dtypes.to_dict()
# {'Trigger': dtype('bool'),
#  'nTracks': dtype('uint64'),
#  'mass': dtype('float64')}

当我这样做时,一切正常,不同分支的类型被正确识别。特别是,在上面的示例中,"Trigger"分支是布尔值,"nTracks"分支是整数,"mass"分支是浮点数。

但是,当我使用读取同一个文件时,uproot.daskframe我取而代之的是取回一个分配了所有三个分支的 daskframe float64,如下所示:

df = uproot.daskframe(file_name, tree_name, branches)
df.dtypes.to_dict()
# {'Trigger': dtype('float64'),
#  'nTracks': dtype('float64'),
#  'mass': dtype('float64')}

这使脚本稍后中断,因为我需要将触发器分支专门解释为一个简单的布尔值,以便对其进行剪切。

理想情况下,我希望它能够自动识别每一列的正确 dtype。

或者,手动设置它们对我来说也很好。我可以通过以旧方式阅读一个事件并使用它来找出正确的 dtypes。根据文档,我应该能够传递一个返回 a 的字典uproot.interp.interp.Interpretation,但我不清楚它到底是如何工作的。

这整个混乱是使用dask还是限制uproot

作为参考,我使用的是 uproot 3.11.3 并安装了 dask 版本 2.6.0。

4

0 回答 0