获取 Awkward 数组中不同级别上具有通用名称的所有属性
Get all attributes with common name on different levels in Awkward array
笨拙的库是否提供了一种方法来切出给定名称的所有属性,而不管级别如何?我在想这样的事情:
import awkward as ak
obj = {
'resource_id': 'abc',
'events': [
{'resource_id': '123', 'value': 12, 'picks':
[{'resource_id': 'asd', 'value': 1},
{'resource_id': 'dll', 'value': 12}
]
},
{'resource_id': '456', 'value': 12, 'picks':
[{'resource_id': 'cvf', 'value': 23},
{'resource_id': 'ggf', 'value': 34},
]
},
]
}
ar = ak.from_iter(obj)
rid = ar[..., 'resource_id']
rid
的值只是字符串 'abc',但我期待的是类似以下的内容:
[
['abc'],
['events':[
[['123'], 'picks':[['asd'], ['dll']]],
[['456'], 'picks':[['cvf'], ['ggf']]],
]
]
但是,我仍在努力解决尴尬的数组,以便我可以完全离开这里。
它没有,而且我不确定这种操作的输出应该如何形成。例如,如果你选择外面的 "resource_id"
,你会得到
>>> ar["events", "resource_id"]
<Array ['123', '456'] type='2 * string'>
但是如果你选择里面的"resource_id"
,你会得到
>>> ar["events", "picks", "resource_id"]
<Array [['asd', 'dll'], ['cvf', 'ggf']] type='2 * var * string'>
请注意,...
确实有意义,但它会切入行(嵌套列表),而不是列(记录字段名称)。
>>> ar["events", "picks", "value"]
<Array [[1, 12], [23, 34]] type='2 * var * int64'>
>>> ar["events", "picks", "value", ..., 0]
<Array [1, 23] type='2 * int64'>
此外,了解您可以使用字符串和字符串列表 (nested projection) 进行投影可能会有所帮助:
>>> print(ar["events", "picks", ["resource_id", "value"]])
[[{resource_id: 'asd', value: 1}, ... {resource_id: 'ggf', value: 34}]]
如果这有助于解决您的切片问题(这可能会在所有级别手动挑选 "resource_id"
并以对您的数据有意义的方式将它们放在一起,但可能无法一概而论).
笨拙的库是否提供了一种方法来切出给定名称的所有属性,而不管级别如何?我在想这样的事情:
import awkward as ak
obj = {
'resource_id': 'abc',
'events': [
{'resource_id': '123', 'value': 12, 'picks':
[{'resource_id': 'asd', 'value': 1},
{'resource_id': 'dll', 'value': 12}
]
},
{'resource_id': '456', 'value': 12, 'picks':
[{'resource_id': 'cvf', 'value': 23},
{'resource_id': 'ggf', 'value': 34},
]
},
]
}
ar = ak.from_iter(obj)
rid = ar[..., 'resource_id']
rid
的值只是字符串 'abc',但我期待的是类似以下的内容:
[
['abc'],
['events':[
[['123'], 'picks':[['asd'], ['dll']]],
[['456'], 'picks':[['cvf'], ['ggf']]],
]
]
但是,我仍在努力解决尴尬的数组,以便我可以完全离开这里。
它没有,而且我不确定这种操作的输出应该如何形成。例如,如果你选择外面的 "resource_id"
,你会得到
>>> ar["events", "resource_id"]
<Array ['123', '456'] type='2 * string'>
但是如果你选择里面的"resource_id"
,你会得到
>>> ar["events", "picks", "resource_id"]
<Array [['asd', 'dll'], ['cvf', 'ggf']] type='2 * var * string'>
请注意,...
确实有意义,但它会切入行(嵌套列表),而不是列(记录字段名称)。
>>> ar["events", "picks", "value"]
<Array [[1, 12], [23, 34]] type='2 * var * int64'>
>>> ar["events", "picks", "value", ..., 0]
<Array [1, 23] type='2 * int64'>
此外,了解您可以使用字符串和字符串列表 (nested projection) 进行投影可能会有所帮助:
>>> print(ar["events", "picks", ["resource_id", "value"]])
[[{resource_id: 'asd', value: 1}, ... {resource_id: 'ggf', value: 34}]]
如果这有助于解决您的切片问题(这可能会在所有级别手动挑选 "resource_id"
并以对您的数据有意义的方式将它们放在一起,但可能无法一概而论).