특정 포맷의 Json에서 Panda DataFrame으로 네스트
팬더 DataFrame에서 Json 파일의 내용을 특정 형식으로 포맷해야 데이터를 변환하고 스코어링 모델을 통해 실행할 수 있습니다.
file = C:\scoring_model\json.js
('파일'의 내용은 다음과 같습니다.)
{
"response":{
"version":"1.1",
"token":"dsfgf",
"body":{
"customer":{
"customer_id":"1234567",
"verified":"true"
},
"contact":{
"email":"mr@abc.com",
"mobile_number":"0123456789"
},
"personal":{
"gender": "m",
"title":"Dr.",
"last_name":"Muster",
"first_name":"Max",
"family_status":"single",
"dob":"1985-12-23",
}
}
}
다음과 같은 데이터 프레임이 필요합니다(분명히 모든 값이 같은 행에 있으며, 이 질문에 대해 가능한 한 최적의 형식을 취하려고 했습니다).
version | token | customer_id | verified | email | mobile_number | gender |
1.1 | dsfgf | 1234567 | true | mr@abc.com | 0123456789 | m |
title | last_name | first_name |family_status | dob
Dr. | Muster | Max | single | 23.12.1985
나는 이 주제에 대한 다른 모든 질문들을 살펴보았고 Json 파일을 팬더에 로드하기 위해 다양한 방법을 시도했다.
with open(r'C:\scoring_model\json.js', 'r') as f:
c = pd.read_json(f.read())
with open(r'C:\scoring_model\json.js', 'r') as f:
c = f.readlines()
시험을 마친pd.Panel()
Python Pandars: 데이터 프레임 결과를 사용하여 데이터 프레임의 열에 정렬된 사전을 분할하는 방법[yo = f.readlines()]
각 셀의 콘텐츠를 분할하는 방법을 생각해 보았습니다.("")
분할된 내용을 다른 열에 넣을 수 있는 방법을 찾았지만 아직까지는 잘 되지 않았습니다.
예를 들어 전체 json을 dict(또는 목록)로 로드하는 경우json.load
, 다음을 사용할 수 있습니다.
In [11]: d = {"response": {"body": {"contact": {"email": "mr@abc.com", "mobile_number": "0123456789"}, "personal": {"last_name": "Muster", "gender": "m", "first_name": "Max", "dob": "1985-12-23", "family_status": "single", "title": "Dr."}, "customer": {"verified": "true", "customer_id": "1234567"}}, "token": "dsfgf", "version": "1.1"}}
In [12]: df = pd.json_normalize(d)
In [13]: df.columns = df.columns.map(lambda x: x.split(".")[-1])
In [14]: df
Out[14]:
email mobile_number customer_id verified dob family_status first_name gender last_name title token version
0 mr@abc.com 0123456789 1234567 true 1985-12-23 single Max m Muster Dr. dsfgf 1.1
빌트인을 사용하여 JSON을 역직렬화하면 훨씬 쉬워집니다.json
module first (모듈 first)pd.read_json()
를 사용하여 평탄하게 합니다.pd.json_normalize()
.
# deserialize
with open(r'C:\scoring_model\json.js', 'r') as f:
data = json.load(f)
# flatten
df = pd.json_normalize(d)
사전이 전달되는 경우json_normalize()
단일 행으로 평탄화되지만 목록이 전달되면 여러 행으로 평탄화됩니다.따라서 네스트된 구조에 키와 값의 쌍만 포함되어 있는 경우pd.json_normalize()
어떤 매개 변수도 없이 평탄하게 만들기에 충분합니다.
단, 데이터에 리스트(파일 내 네스트 내의 JSON 배열)가 포함되어 있는 경우에는record_path=
판다가 기록의 길을 찾도록 하자는 주장.예를 들어, 데이터가 다음과 같은 경우(값이 다음과 같은 경우)"body"
는 목록입니다.즉, 레코드 목록입니다.
data = {
"response":[
{
"version":"1.1",
"customer": {"id": "1234567", "verified":"true"},
"body":[
{"email":"mr@abc.com", "mobile_number":"0123456789"},
{"email":"ms@abc.com", "mobile_number":"9876543210"}
]
},
{
"version":"1.2",
"customer": {"id": "0987654", "verified":"true"},
"body":[
{"email":"master@abc.com", "mobile_number":"9999999999"}
]
}
]
}
그러면 합격할 수 있다record_path=
그 프로그램에 기록이 부족하다는 것을 알리다"body"
통과하다meta=
메타데이터의 패스를 설정합니다.의 방법에 주의해 주세요."body"
,"version"
그리고."customer"
데이터에서는 같은 레벨이지만"id"
한 단계 더 중첩되어 있기 때문에 아래 값을 얻으려면 목록을 전달해야 합니다."id"
.
df = pd.json_normalize(data['response'], record_path=['body'], meta=['version', ['customer', 'id']])
언급URL : https://stackoverflow.com/questions/34341974/nested-json-to-pandas-dataframe-with-specific-format
'programing' 카테고리의 다른 글
Wordpress 플러그인에서 미디어 업로더를 추가하는 방법 (0) | 2023.02.20 |
---|---|
오류 java.sql.SQLException: ORA-00911: 잘못된 문자 (0) | 2023.02.20 |
재료 UI에서 자동 완성 구성요소에 대한 변경 처리 (0) | 2023.02.20 |
워드프레스:카테고리 및 태그가 존재하지 않는 경우 자동으로 삽입하시겠습니까? (0) | 2023.02.20 |
Mongodb의 들판에서 서브스트링을 찾는 방법 (0) | 2023.02.20 |