2016-10-28 2 views
1

점 표기법으로 json에서 만든 팬더 데이터 프레임에 액세스 할 수없는 이유를 누군가가 설명 할 수 있습니까? 적어도 데이터 프레임이 너무 중첩되지 않은 경우는 아닙니다. 내 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 
    } 
    } 
} 

을 그런 일을 :

(10)가 제 인스턴스 질량

AttributeError: 'dict' object has no attribute 'e' 

답변

1

를 반환 그 아래의 각 항목에 대한 속성을 생성하는 계열이다. 이 프로세스는 n 단계만큼 반복되지 않으므로 두 번째 인스턴스에서 대량은 액세스 할 때 대괄호 표기법을 사용해야하는 dict입니다.

+0

아, 알겠습니다. 어쨌든 점 표기법 n 수준을 깊게 유지할 수 있습니까? –

+0

쉬운 방법 AFAIK가 내장되어 있지 않지만 직접 할 수 있습니다. 기본적인 아이디어로 gl.physics.mass = pd.Series (gl.physics.mass)라고 쓸 수 있습니다. 좀 더 일반화하기 위해 첫 번째 시리즈를 반복하고 사전을 확인한 다음 시리즈로 변환 할 수 있습니다. 단, 시리즈의 데이터 표현은 일반적으로 데이터의 1 차원 "열"을 나타 내기 위해 사용됩니다. –