#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
Dict to DataframeList 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(data, orient='columns', dtype=None, columns=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
https://rfriend.tistory.com/482
'분석가의 개발 공부 > Python' 카테고리의 다른 글
[Python] 좀비 프로세스 죽이기 (How to kill zombie process) (0) | 2023.03.06 |
---|---|
pip를 이용한 Pandas 설치, 제거, 업데이트 (+pandas가 업데이트 되지 않는 경우?) (0) | 2022.12.03 |
[Python] 다양한 String 처리 코드 (0) | 2020.07.23 |
[Python] UnboundLocalError: local variable referenced before assignment (0) | 2020.06.02 |