有人可以解释一下为什么我不能用点符号访问从json创建的pandas数据帧。或者至少,如果数据帧没有太嵌套,则不行。
如果我的json文件包含:
{
"mass":{
"e": 0.511,
"mu": 105.758,
"pi0": 134.977,
"pi+": 139.570,
"k0": 497.648,
"k+": 493.667
}
}
我完全可以做到:
glob = pd.read_json('Constants/constants.json')
print glob.mass.e
但是,如果我的json文件如下所示:
{
"physics":{
"mass":{
"e": 0.511,
"mu": 105.758,
"pi0": 134.977,
"pi+": 139.570,
"k0": 497.648,
"k+": 493.667
},
"ckm":{
"ud": 0.97427,
"us": 0.22534
}
},
"experiment":{
"detector":{
"width": 2.56,
"height": 2.33,
"length": 10.37,
"distance": 470
},
"decayPipe":{
"length": 50
}
}
}
然后,做:
glob = pd.read_json('Constants/constants.json')
print glob.physics.mass.e
将返回
AttributeError: 'dict' object has no attribute 'e'
答案 0 :(得分:1)
在第一个实例中,mass是一个Series,它为其下的每个项创建属性。它不会重复这个过程n级别,因此在第二个实例中,mass只是一个dict,您需要使用括号表示法来访问。