Python - Pandas를 이용한 데이터 변경

cosmosJ·2024년 2월 2일

데이터 분석

목록 보기
4/26
post-thumbnail

CRUD

CRUD란, Create, Read, Update, Delete의 준말로, 데이터를 다루는 모든 분야에서 데이터를 처리하기 위해 기본적으로 요구되는 4가지 기능을 의미한다.

데이터 분석에서 Pandas를 이용하여 데이터를 조작할 때도, CRUD에 입각하여 조작하게 된다.

판다스에서의 CRUD 예

ex1. 학생과 학점으로 이루어진 데이터 프레임을 이용하여, 학점을 기준으로, 등급을 series를 추가할 수 있다.

ex2. 특정학생의 학과를 국문학에서 영문학으로 변경한다.

Dataframe Index

데이터 프레임의 인덱스는 데이터프레임의 가장 큰 특징 중 하나로, 인덱스를 활용하면, 레코드를 쉽게 조회하고, 구분할 수 있게 해준다.

df.set_index("컬럼 명") 으로 인덱스를 지정할 수 있다. (이 경우, 기존의 인덱스는 그냥 컬럼이 된다.)

인덱스와 loc를 결합하면, 데이터에 대해 보다 강력하게 조회가 가능하다.

# 라이브러리 import
import numpy as np
import pandas as pd

# 컬럼 생성
grade = np.array(['B','D','B','C','A'])
df['등급'] = grade
df

# 컬럼 생성2
age = pd.Series([21,20,24,23,28])
df["나이"] = age # 나이 컬럼 할당

# 인덱스 설정
df.index = ["one",'two','three','four','five'] # 방법1
df.set_index(df['col']) # 방법2 (얘도 원본 반영시 inplace 필요)

# 인덱스 리셋
df.reset_index(inplace=True) # inplace = True 는  원본데이터에 반영함을 의미 (없으면 원본에는 반영 안됨)

#컬럼 삭제
df.drop('성별', axis=1) #axis는 rows, columns 같은 문자도 가능
# 마찬가지로 원본 수정 시 inplace 필요

# 일반적으로 inplace를 사용하지는 않고, 그냥 새로운 변수에 할당해서 사용한다.
df1 = df.drop('성별', axis='columns')

# 데이터프레임 행 삭제
df.drop("one", axis=0) # 행은 인덱스 명으로 삭제

OpenAPI를 이용한 데이터 수집

데이터를 가져오는 방법은 다양하다. (ex. 로컬 파일 호출, 외부 파일 호출)
그 중, OpenAPI를 이용하는 방법도 존재한다.

OpenAPI란, 특정 서비스를 제공하는 서비스 업체가 자신의 서비스에 접근하는 방법을 공개한 것이다. (정해진 규칙에 의해서 접근한다.)

OpenAPI가 제공하는 데이터는 일반적으로 JSON의 형식을 갖는다.

JSON

JSON은 JavaScript Object Notation의 준말로, 데이터 전송 및 저장에 많아 사용되는 개방형 데이터 포멧이다.

키-값 쌍으로 구성되어 있으며, 파이썬 딕셔너리와 유사하다.
따라서 파이썬 내에서 변환하거나, 읽기가 쉽다.

파이썬 외의 언어에서도 JSON을 읽기 위한 다양한 라이브러리를 제공한다.

JSON to Dataframe

파이썬을 통해 json을 dictionary로, dictionary는 Dataframe으로 변환할 것이다.

실습 코드

## 실습 : 전국 무인 교통 단속 카메라 표준 데이터 `json` 데이터 `pandas`로 호출하기

# 라이브러리 import
import pandas as pd
import json # json pasing용 라이브러리
import requests # 서버 요청용 라이브러리

# Open API를 위한 데이터
key = "각자 가지고 있는 key"
page_no = 1 # request param1
page_size = 100 # request param2

url= f"https://apis.data.go.kr/6260000/BusanITSCCTV/CCTVList?serviceKey={key}&pageNo={page_no}&numOfRows={page_size}"

# request 호출
response = requests.get(url)
response.encoding = 'utf-8' # 결과 인코딩

print(response.text[0:400]) # 결과 출력

result_dict = json.loads(response.text) # json to dictionary
result_dict.keys()

result_dict['content'].keys()
result_dict['content']['items'][0]

# 카메라 위치, 위도, 경도만 출력
address_list = []
latitude_list = []
longitude_list = []

# dictionary 속 데이터 정보 입력
for item in result_dict['content']['items']:
    address_list.append(item['instlPos'])
    latitude_list.append(item['lat'])
    longitude_list.append(item['lot'])

print(address_list[:10])
print(longitude_list[:10])
print(latitude_list[:10])

df = pd.DataFrame({'location' : address_list,
              'longitude' : longitude_list,
              'latitude' : latitude_list
              }) #데이터 프레임으로 생성
profile
백엔드, Data Science, AI 분야 학습 내용을 정리하는 블로그입니다.

0개의 댓글