한컴AI 2기

[스나이퍼팩토리] 한컴AI 2기 - Python에서 JSON데이터 다루기 w/ Pandas

싱커 2025. 9. 17. 15:11

웹 백엔드를 배우고 난 뒤, json 데이터는 내게 많이 익숙한 포맷이다.

다만 학부시절과 졸업 직후 취준 시즌때 파이썬을 배울 때에는 json포맷을 사용하지 않았어서, GPT api를 본격적으로 사용하기 전까지는 이 둘을 함께 고려해볼 상황은 없었다.

예시 코드에서 사용할 JSON 데이터의 형태

예시 코드를 통해 Python에서 JSON데이터를 Pandas 데이터프레임으로 소화해볼 것이다.

obj = """
{
    "name": "Wes",
    "cities_lived": ["Akron", "Nashville", "New York", "San Francisco"],
    "pet": null,
    "siblings": [
        {"name": "Scott", "age": 34, "hobbies": ["guitars", "soccer"]},
        {"name": "Katie", "age": 42, "hobbies": ["diving", "art"]}
    ]
}
"""

우선 변수 obj에 텍스트 형태로 JSON 데이터를 할당한다. 일단 구조상, 딕셔너리와 유사한 느낌으로 사용할 수 있을 것 같다.

import json
result = json.loads(obj)
result

gpt API를 이용해 랭체인이나 펑션콜을 사용했을때의 경험이 떠올랐다. 프롬프트에 프론트엔드에서 넘어온 json데이터를 넣어줄 때, f스트링을 이용해서 json데이터를 넣어줄 필요가 있었다. 그 때 import json이후 json.loads() 방식으로 불러왔었던 것 같다.

{'name': 'Wes',
 'cities_lived': ['Akron', 'Nashville', 'New York', 'San Francisco'],
 'pet': None,
 'siblings': [{'name': 'Scott', 'age': 34, 'hobbies': ['guitars', 'soccer']},
  {'name': 'Katie', 'age': 42, 'hobbies': ['diving', 'art']}]}

터미널의 출력 결과는 위와 같다. print(type(result))의 결과는 <class 'dict'>로 출력된다.


Python to JSON

json.dumps() 함수를 사용하면, 파이썬 객체를 JSON 문자열로 바꿀 수 있다.
asjson = json.dumps(result)
print(asjson)
{"name": "Wes", "cities_lived": ["Akron", "Nashville", "New York", "San Francisco"], "pet": null, "siblings": [{"name": "Scott", "age": 34, "hobbies": ["guitars", "soccer"]}, {"name": "Katie", "age": 42, "hobbies": ["diving", "art"]}]}

 

JSON to DataFrame

pd.DataFrame() 함수를 사용하면, 딕셔너리 객체의 키(key)들은 데이터프레임의 열(column) 이름이 되고, 값(value)들은 각 행의 데이터로 변환된다.
 
예시 JSON 데이터에서 자녀데이터를 데이터프레임화하는 코드는 이렇게 표현할 수 있다.
siblings = pd.DataFrame(result["siblings"], columns=["name", "age"])

출력 결과는 아래와 같다.

  name age
0 Scott 34
1 Katie 42
이러한 방식이라면, 다차원 JSON데이터도 필요한 만큼 국소적으로 파편화하여 2차원 테이블 데이터로 다룰 수 있을 것 같다. (다만 그러한 형태의 데이터 타입은 가급적 지양해야 할 것이다.)

본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 2기 (B-log) 리뷰로 작성 되었습니다.