source

팬더 데이터 프레임에 JSON 읽기 - ValueError: dicts를 비시리즈와 함께 사용하면 순서가 애매해질 수 있습니다.

manysource 2023. 3. 16. 21:39

팬더 데이터 프레임에 JSON 읽기 - ValueError: dicts를 비시리즈와 함께 사용하면 순서가 애매해질 수 있습니다.

아래 JSON 구조에서 panda 데이터 프레임을 읽으려고 하는데 오류 메시지가 사라집니다.

Value Error: dicts를 비시리즈와 혼재시키면 순서가 애매해질 수 있습니다.

Json 데이터:

{
    "status": {
        "statuscode": 200,
        "statusmessage": "Everything OK"
    },

    "result": [{
        "id": 22,
        "club_id": 16182
    }, {
        "id": 23,
        "club_id": 16182
    }, {
        "id": 24,
        "club_id": 16182
    }, {
        "id": 25,
        "club_id": 16182
    }, {
        "id": 26,
        "club_id": 16182
    }, {
        "id": 27,
        "club_id": 16182
    }]
}

이걸 어떻게 맞추죠?아래 대본을 써봤는데...

j_df = pd.read_json('json_file.json')
j_df

with open(j_file) as jsonfile:
    data = json.load(jsonfile)

데이터 프레임의 결과 부분만 필요한 경우, 여기에 도움이 되는 코드가 있습니다.

import json
import pandas as pd
data = json.load(open('json_file.json'))

df = pd.DataFrame(data["result"])

와 함께 사용할 수 있습니다.

from pandas.io.json import json_normalize
import json

with open('json_file.json') as data_file:    
    d= json.load(data_file)  

df = json_normalize(d, 'result').assign(**d['status'])
print (df)
   club_id  id  statuscode  statusmessage
0    16182  22         200  Everything OK
1    16182  23         200  Everything OK
2    16182  24         200  Everything OK
3    16182  25         200  Everything OK
4    16182  26         200  Everything OK
5    16182  27         200  Everything OK

데이터 프레임의 결과 부분만 필요한 경우 다음 코드를 참조하십시오.

import json
import pandas as pd
data = json.load(open('json_file.json'))

df = pd.DataFrame(data["result"])

제가 알기로는 ValueError는 데이터 유형이 곳곳에 있기 때문에 발생합니다. 일부 문자열, 일부 목록, 다중 {} 등입니다.이 오류는 데이터를 정규화함으로써 해결할 수 있습니다.그러기 위해서는, 다음의 코드를 참조해 주세요.

import json

with open('json_file.json') as project_file:    
    data = json.load(project_file)  

df = pd.json_normalize(data)

팬더 데이터 프레임은 루트 레벨의 리스트가 되길 원하는 것 같습니다.데이터를 목록에 넣기만 하면 됩니다.

with open(j_file) as jsonfile:
    data = json.load(jsonfile)
    df = pd.DataFrame([data])

json_normalize유효한 어프로치입니다만, 제 사용 예에서는, 오리지날 딕트와 어레이를 모두 데이터 프레임에 보관해 둘 필요가 있었습니다.또, 그 어프로치를 사용했습니다.

input_df = pd.read_json(input_path, lines=True, orient="columns")

단, 파일은 새로운 행으로 구분된json 형식(파일 내의 각 행에1개의 json 문서)이어야 합니다.따라서 다음과 같이 표시됩니다(사용했습니다).jq -c한 줄로 변환합니다).

{"status":{"statuscode":200,"statusmessage":"Everything OK"},"result":[{"id":22,"club_id":16182},{"id":23,"club_id":16182},{"id":24,"club_id":16182},{"id":25,"club_id":16182},{"id":26,"club_id":16182},{"id":27,"club_id":16182}]}

언급URL : https://stackoverflow.com/questions/49505872/read-json-to-pandas-dataframe-valueerror-mixing-dicts-with-non-series-may-lea