我正在尝试从本期#390中的文件中读取“ hits”和“ trks”数据作为MultiIndex DataFrame。
通过将树的内容作为锯齿状数组打开,我设法获取了有关DataFrame中所有事件的数据。现在,我希望在MultiIndex DataFrame中读取“ hits”和“ trks”。但是我不确定我为什么为什么tree.pandas.df(“ hits。”)和tree.pandas.df(“ trks。”)对我不起作用。
这是我的处理方法:
tree = uproot.open(my_file)['E']
tree.pandas.df("hits.*")
这会给出一个空的AssertionError。
AssertionError:
但是当我尝试例如:
tree.pandas.df("hits.trig")
我确实获得了MultiIndex DataFrame,其中一列包含从tree [“ hits.trig”]中读取的数据。
注意:问题1也适用于“ trks”。但是,我能够以锯齿状数组的形式访问命中数据,而对于“ trks”,在某些特定情况下是不可能的。在这些情况下,我将按照以下方式进行处理:
tree["trks.rec_stages"].interpretation
输出为: asjagged(asdtype('> i4'),10)
然后:
tree.array("trks.rec_stages")
我收到以下错误:
ValueError: could not broadcast input array from shape (15713) into shape (15711)
我总是使用tree.array()获得上述错误(“ trks.rec_stages”,“ trks.error_matrix”,“ trks.fitinfo”)。
但是当我尝试这样做时:
lazy_rec_stages = tree.lazyarray("trks.rec_stages")
我得到的数据如下:
<ChunkedArray [[1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1] ... [1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1] [1 3 5 ... 1 1 1]] at 0x7f4dabe12450>
除了用uproot读取的每个lazy_rec_stages数组中的数据似乎都没有保留原始根文件中的数据“结构”。为了说明这一点,我将使用以下示例: 如果我们查看一个事件,则对于每个事件,我们都有关联的轨道数,每个轨道的重构阶段信息存储在rec_stages中,似然性存储在trks.lik中:
event trks trks.rec_stages trks.lik
0 0 "1 2 3" 10
1 "4 5" 20
2 "6 7 8 9" 30
所以人们会期望:
tree.lazyarray("trks.rec_stages")[0][0]
Output: "1 2 3 5 4"
tree.lazyarray("trks.lik")[0][0]
Output: 10
但是我不确定情况是否如此,这就是我得到的:
tree.lazyarray("trks.rec_stages")[0][0]
Output: [1 2 3 4 5 6 7 8 9]
这使得难以关联哪个rec_stage与哪个trks相对应。您能告诉我我在做什么错吗?
PS:我认为我正在使用最新版本的uproot。
感谢您的时间和考虑。