분석가의 개발 공부/Python

[Python] Dict to Dataframe

긴기린그림 2020. 5. 4. 00:44

#1. Dict to Dataframe in Python

JSON 형식을 Dataframe으로 변환하는 방법을 찾아 헤메던 과정에서 알게 된 내용을 정리해보았다.

 

통계청 API로 총인구조사 데이터를 불러보니 아래와 같은 형태. 리스트 내에 딕셔너리 형식의 데이터들이 담겨있다.

(출력형식을 JSON으로 해도 데이터셋 형태가 조금씩 다르다... JSON 형식을 이해했다가 못하게 되었다 허허)

json_stat = [{'TBL_NM': '인구 가구 및 주택 - 읍면동(2015) 시군구(2016~)',
              'PRD_DE': '2017',
              'TBL_ID': 'DT_1IN1502',
              'ITM_NM': '총인구',
              'ITM_NM_ENG': 'Total population',
              'ITM_ID': 'T100',
              'UNIT_NM': '명',
              'ORG_ID': '101',
              'UNIT_NM_ENG': 'Person',
              'C1_OBJ_NM': '행정구역별(읍면동)',
              'C1_OBJ_NM_ENG': 'By administrative divisions(eup myeon dong)',
              'DT': '156561',
              'PRD_SE': 'A',
              'C1': '21310',
              'C1_NM': '기장군',
              'C1_NM_ENG': 'Gijang-gun'},...]
  • Output : Dataframe 형식의 Data Import
  • To-Do
    1. Dict to Dataframe
    2. List comprehension으로 다중 dict 처리

라고 생각했으나... 너무 복잡하게 생각했더랬다 흑

df_stat = pd.DataFrame(json_stat)

한줄이면 JSON to Dataframe 완성.

그렇지만 찾은 게 아까우니까 기록은 남긴다.


1. Dict to Dataframe

test_row = json_stat[0]
test_result = pd.DataFrame.from_dict(test_row)

[pd.DataFrame.from_dict]

pd.DataFrame.from_dict(dataorient='columns'dtype=Nonecolumns=None)

 

- data : dict 형식의 데이터 ({field : array-like} 또는 {field : dict})

- orient : 데이터의 방향 (orientation).
                  columns - dict 데이터의 key가 column값 (default)

                  index     - dict 데이터의 key가 row값 (transposed된 형태)

- dtype : 데이터 타입 (보통 default)

- columns : orient='index'일 때 컬럼 라벨 지정. 리스트 형식
             

그러나... 이렇게 실행하면 다음의 에러가 발생한다.

If using all scalar values, you must pass an index

 

json_stat의 key value가 모두 스칼라 형식으로 되어 있기 때문!

에러 해결방식은 다음의 4가지 방식이 있다.

 

1. Index 값 설정

test_result = pd.DataFrame(test_row, index = [0])

2. Scalar 형식 -> 리스트 형식 (여기선 하지 말자...)

# dict.values 값을 모두 리스트 형식으로 처리
test_row = {'TBL_NM': ['인구 가구 및 주택 - 읍면동(2015) 시군구(2016~)'],
			'PRD_DE': [2017'],...
            }

3. 리스트 처리된 dict 데이터를 from_records로 변환

test_result = pd.DataFrame.from_records([test_row])

4. 리스트 처리된 dict 데이터를 from_dict로 변환 ◀

test_result = pd.DataFrame.from_dict([test_row])

 

2. List comprehension으로 다중 dict 처리

List comprehension은 파이썬의 가장 큰 장점 중 하나로 익숙해질 필요가 있다.

배열 선언과 값 할당을 동시에 해주면서 처리에 소요되는 시간이 짧아진다.

 

[ (변수를 활용한 함수) for (변수) in (변수 list)]

 

이걸로 여러 줄의 dict를 어떻게 처리해야 하나 고민했으나, 그 과정에서 이 모든 것이 필요없음을 깨달으며... 오늘의 포스팅은 끝.

 

 

 

 

 

Reference

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.from_dict.html

 

pandas.DataFrame.from_dict — pandas 1.0.3 documentation

The “orientation” of the data. If the keys of the passed dict should be the columns of the resulting DataFrame, pass ‘columns’ (default). Otherwise if the keys should be rows, pass ‘index’.

pandas.pydata.org

https://rfriend.tistory.com/482

 

[Python] pandas DataFrame: ValueError: If using all scalar values, you must pass an index 에러 해결 방법

이번 포스팅에서는 Python pandas DataFrame을 만들려고 할 때 "ValueError: If using all scalar values, you must pass an index" 에러 해결 방안 4가지를 소개하겠습니다. 아래의 예처럼 dictionary로 키, 값..

rfriend.tistory.com