如何通过变量动态读取pandas加载的嵌套JSON节点数据
实现方法
你只需要把存储了节点名的变量直接放在方括号索引位即可,Python会自动读取变量存储的字符串作为键名完成查找,不需要额外的特殊语法。
先修正两处基础问题
- 你给出的JSON结构缺少键和值之间的冒号、同级键之间的逗号,合法结构应为:
{ "Experiment": { "rats": { "animal": [1,2,3,4] }, "dogs": { "animal": [1,2,3,4] } } }
- 你原本的硬编码写法里,字符串类型的键名没有加引号,Python会把
Experiment、dogs识别成变量名而非键名字符串,会直接报命名错误。
动态读取的正确写法
所有层级的键访问都通过方括号完成,存了键名的变量直接放进方括号就行:
import pandas as pd conf = pd.read_json(filepath) # 赋值要读取的节点名,修改这个变量值就能切换读取rats/dogs的数据 target_type = "dogs" # 变量直接作为索引传入即可 animal = conf["Experiment"][target_type]["animal"][1]
如果后续要切换读rats节点,只需要把target_type的值改成"rats"即可,不需要修改索引逻辑。
注:
pd.read_json读取嵌套JSON返回的对象不管是字典结构还是嵌套的pandas Series结构,上述索引方法都通用,pandas的标签索引原生支持传入变量作为匹配的标签值。
你之前写的conf[Experiment]a[1]属于不符合Python语法的写法,Python不支持直接把变量贴在方括号后面做索引,每一层的键访问都需要单独包裹在一对方括号中。
内容的提问来源于stack exchange,提问作者Florida Man
相关产品推荐
相关产品推荐

