我有一个应用程序,我正在尝试自动化。为了收集所有需要的信息,我必须对应用程序中的每个节点运行一个API调用。我使用以下函数来执行此操作:
def node_df(self, nodes):
lst_dict = []
for node in nodes:
jsonstr = self.session.get_hdw_node(node)
lst_dict.append(jsonstr)
df1 = pd.DataFrame()
df2 = df1.append(lst_dict)
drop = df2.drop(["nodeType", "timestamp"], axis=1)
return drop
单节点JSON输出:
{
"Nodes": [{
"id": "P1_H17_F03_JN0@00-9C7719-839318-409186-3459CB[0-1-94]",
"timestamp": "2019-12-11T16:22:55Z",
"name": "P1_H17_F03_JN0",
"node": "node1@00-E4DEA9-90EB54-48BE9D-7C7D62[1-1-10]",
"dataSet": [{
"dev": "0x003C"
}, {
"dev": "0x00C2"
}, {
"dev": "0x002A"
}, {
"dev": "0x0048"
}, {
"dev": "0x0011"
}, {
"dev": "0x0024"
}],
"nodeType": "HardwareNodeBlock"
}]
}
输出创建以下数据帧:
dataSet node id
0 [{'dev': '0x003C'}, {'dev': '0x00C2'}, {'dev'... node1@00-E4DEA9-90EB45-48BE9D-7C7D62[1-1-10] P1_H17_F03_JN0@00-9C7719-839318-409...
1 [{'dev': '0x0020'}, {'dev': '0x0038'}, {'dev'... node2@00-32BF13-BABA54-4B7FBF-B34F5B[1-1-8] P1_H14_F04_JN1@00-77E5FA-C1055C-4E0...
2 [{'dev': '0x0112'}, {'dev': '0x0113'}, {'dev'... node2@00-32BF13-BABA54-4B7FBF-B34F5B[1-1-8] P1_H14_F04_JN2@00-F3D05C-08DB23-443...
3 [{'dev': '0x00E9'}, {'dev': '0x00EC'}, {'dev'... node2@00-32BF13-BABA54-4B7FBF-B34F5B[1-1-8] P1_H14_F04_JN3@00-DC0EED-31DE6C-4B3...
4 [{'dev': '0x004B'}, {'dev': '0x0061'}, {'dev'... node2@00-32BF13-BABA54-4B7FBF-B34F5B[1-1-8] P1_H14_F04_JN4@00-3A57F1-E7A3B6-44E...
我正在尝试匹配来自df["dataSet"]
的值'0x0113'
,以便返回行以获取df["id"]
'0x0113'
是连接到节点的设备之一
通常我会做一个df.loc[df['dataSet'].str.match('0x0113')]
,但这里当然没那么简单。如何做到这一点?我想最好先合并dataSet
键,因为它们都有相同的键名
非常感谢您的帮助
我想办法解决这个问题。我首先将这些键合并到一个字典中,在
node_df
函数中将以下函数应用于我的数据帧:输出:
然后我决定我根本不需要这个键,用一个函数来替换
consolidate_dataset
,把dataSet
变成一个列表输出:
现在我可以很容易地匹配数据帧中的值
'0x0113'
,得到df["id"]
:输出:
相关问题 更多 >
编程相关推荐