Pandas와 JSON 데이터 처리

JSON 기본 이해

JSON(JavaScript Object Notation)은 XML과 유사하게 텍스트 정보를 저장하고 교환하는 구문입니다. JSON은 XML보다 더 작고 빠르며, 파싱하기 쉽습니다. Pandas는 이러한 JSON 데이터를 효과적으로 다룰 수 있습니다.

[
  {
    "번호": "J001",
    "이름": "네이버",
    "url": "www.naver.com",
    "조회수": 85
  },
  {
    "번호": "J002",
    "이름": "야후",
    "url": "www.yahoo.com",
    "조회수": 73
  }
]

Pandas의 to_string() 메서드로 JSON 문자열을 출력할 수 있습니다.

import pandas as pd

데이터프레임 = pd.read_json('사이트들.json')

print(데이터프레임.to_string())

또한 직접 딕셔너리를 DataFrame으로 변환할 수도 있습니다.

import pandas as pd

자료 = [
    {
      "번호": "J001",
      "이름": "네이버",
      "url": "www.naver.com",
      "조회수": 85
    },
    {
      "번호": "J002",
      "이름": "야후",
      "url": "www.yahoo.com",
      "조회수": 73
    }
]
데이터프레임 = pd.DataFrame(자료)

print(데이터프레임)

Python 딕셔너리에서 DataFrame 생성

JSON 객체는 Python 딕셔너리와 같은 형식을 가집니다.

import pandas as pd

# 딕셔너리 형태의 JSON                                                                                             
s = {
    "열1":{"행1":1,"행2":2,"행3":3},
    "열2":{"행1":"x","행2":"y","행3":"z"}
}

# JSON을 DataFrame으로 변환                                                                                          
데이터프레임 = pd.DataFrame(s)

print(데이터프레임)

중첩된 JSON 데이터 처리

다음은 학생 정보를 포함하는 중첩된 JSON 파일 예시입니다.

{
    "학교명": "ABC 초등학교",
    "학년": "1학년",
    "학생들": [
    {
        "번호": "S001",
        "이름": "톰",
        "수학": 60,
        "물리": 66,
        "화학": 61
    },
    {
        "번호": "S002",
        "이름": "제임스",
        "수학": 89,
        "물리": 76,
        "화학": 51
    }]
}
import pandas as pd

데이터프레임 = pd.read_json('중첩_리스트.json')

print(데이터프레임)

중첩된 데이터의 완전한 분석

json_normalize() 함수를 사용하면 중첩된 JSON 데이터를 쉽게 분석할 수 있습니다.

import pandas as pd
import json

with open('중첩_리스트.json','r') as f:
    자료 = json.loads(f.read())

분석된_데이터프레임 = pd.json_normalize(자료, record_path =['학생들'])
print(분석된_데이터프레임)

메타데이터 표시

메타데이터를 함께 표시하려면 meta 매개변수를 사용합니다.

import pandas as pd
import json

with open('중첩_리스트.json','r') as f:
    자료 = json.loads(f.read())

분석된_데이터프레임 = pd.json_normalize(
    자료,
    record_path =['학생들'],
    meta=['학교명', '학년']
)
print(분석된_데이터프레임)

복잡한 중첩 구조 처리

복잡한 중첩 구조를 가진 JSON 데이터도 Pandas로 처리 가능합니다.

{
    "학교명": "로컬 초등학교",
    "학년": "1학년",
    "정보": {
      "교장": "John Smith",
      "주소": "XYZ road, London, UK",
      "연락처": {
        "이메일": "admin@e.com",
        "전화": "123456789"
      }
    },
    "학생들": [
    {
        "번호": "S001",
        "이름": "톰",
        "수학": 60,
        "물리": 66,
        "화학": 61
    }]
}

glom 모듈을 이용한 깊게 중첩된 데이터 접근

glom 모듈을 통해 깊게 중첩된 데이터에 접근할 수 있습니다.

!pip install glom
import pandas as pd
from glom import glom

데이터프레임 = pd.read_json('깊게_중첩.json')

자료 = 데이터프레임['학생들'].apply(lambda 행: glom(행, '성적.수학'))
print(자료)

태그: pandas JSON python DataFrames glom

9월 21일 20:44에 게시됨