>source

키가 GitHub 저장소 이름이고 값에 JSON 형식 데이터가 포함 된 사전이 있습니다.

전의:


    {'r1':[
       {'id': 1178421030,
       'name': 'x',
        },
       {'id': 1178420990,
       'name': 'y',
       }],
    'r2':[
       {'id': 1178421031,
       'name': 'a',
        },
       {'id': 1178420950,
       'name': 'b',
       }]
    }

다음을 사용하여 dict의 값으로 JSON에서 데이터 프레임을 만들 수 있습니다.

df=pd.DataFrame()
for i in responses:
    
    df=df.append(pd.json_normalize(responses[i]))

이것은 다음과 같은 df를 제공합니다.

  id              name
 1178421030           x
 1178420990           y 
 1178421031           a
 1178420950           b

dict의 키를 다른 열로 지정하고 싶습니다. repo_name df에서 다음과 같습니다.

  id              name       repo_name
 1178421030           x          r1
 1178420990           y          r1
 1178421031           a          r2   
 1178420950           b          r2

어떻게해야할까요?

  • 답변 # 1

    collections.defaultdict를 사용하는 것이 좋습니다. 데이터 수집을 더 잘 제어 할 수 있어야합니다.

    from collections import defaultdict
    d = defaultdict(list)
    for key, value in data.items():
        for entry in value:
            d["id"].append(entry["id"])
            d["name"].append(entry["name"])
            d["repo_name"].append(key)
    d
    defaultdict(list,
                {'id': [1178421030, 1178420990, 1178421031, 1178420950],
                 'name': ['x', 'y', 'a', 'b'],
                 'repo_name': ['r1', 'r1', 'r2', 'r2']})
    
    

    데이터 프레임 생성 :

    pd.DataFrame(d)
          id      name  repo_name
    0   1178421030  x   r1
    1   1178420990  y   r1
    2   1178421031  a   r2
    3   1178420950  b   r2
    
    

    또 다른 옵션은 목록 이해에서 json_normalize를 사용하는 것입니다.

    pd.concat(pd.json_normalize(data, record_path=[key]).assign(repo_name=key) 
              for key in data)
    
    

  • 답변 # 2

    JSON이 "d"라고 가정 해 보겠습니다.

      data=pd.DataFrame()
       for i in d.keys():
            z=pd.DataFrame(d[i])
            z['repo_name']=i
            data=pd.concat([data,z])
    
               id name repo_name
    0  1178421030    x        r1
    1  1178420990    y        r1
    0  1178421031    a        r2
    1  1178420950    b        r2
    
    

관련 자료

  • 이전 python - pandas dataframe - 문자열 열에서 고유 한 단어를 찾고 조건에 따라 다른 열의 발생 및 합계 값을 계산합니다
  • 다음 jquery - $get 후에 부트 스트랩 4 모달이 제대로 작동하지 않습니다