데이터 꿈나무

[사전학습] 1-2 데이터 변경 본문

Activity/KT AIVLE

[사전학습] 1-2 데이터 변경

ye_ju 2024. 8. 31. 10:59

데이터 변경

import numpy as np
import pandas as pd
df = pd.read_csv('./data/student.csv')
display(df)

 

컬럼 생성

# '등급' 컬럼 생성
df['등급'] = 'A'
display(df)

# 성적에 따라 등급 부여
grade = np.array(['B', 'D', 'B', 'C', 'A'])
df['등급'] = grade
display(df)
# 나이를 의미하는 age라는 시리즈 생성
age = pd.Series([21, 20, 24, 23, 28])

# 데이터프레임내 나이 컬럼을 만들고 시리즈를 값으로 할당
df['나이'] = age
display(df)

 

 

인덱스 설정 및 리셋

df.index
RangeIndex(start=0, stop=5, step=1)
df.index = ['one', 'two', 'three', 'four', 'five']
df
sex = pd.Series(['여자', '여자', '남자', '남자', '남자'])
df['성별'] = sex
df

 

# 둘의 index가 다르기 때문에 NaN값
print(f"시리즈 sex의 인덱스      --> {sex.index}")
print(f"데이터프레임 df의 인덱스 --> {df.index}")
# 출력 결과
시리즈 sex의 인덱스      --> RangeIndex(start=0, stop=5, step=1)
데이터프레임 df의 인덱스 --> Index(['one', 'two', 'three', 'four', 'five'], dtype='object')

 

# 인덱스 통일 후 다시 성별 컬럼에 값 부여
sex.index = df.index
df['성별'] = sex
df
# 현재 설정되어 있는 인덱스 리셋
#df.reset_index(inplace=True) # inplace=True라는 인수값을 주면 데이터프레임 원본에 바로 적용 됨
df.reset_index()
df

 

df.reset_index(inplace=True)
df
df.set_index('이름')
df.set_index('이름', inplace=True)
df

 

 

컬럼 삭제

# 성별 컬럼 삭제 (dataframe의 drop 메서드 이용)
df.drop('성별', axis=1) # drop에서 axis=1의 값을 주면 컬럼을 삭제하겠다는 의미

 

df

 

df.drop('성별', axis='columns')
df

 

df2 = df.drop('성별', axis=1)
df2
df.set_index('index', inplace=True)
df
# 데이터프레임 행 삭제
df.drop('one', axis=0)
df

 

 

 

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

import pandas as pd
import json
import requests
# open API 호출시 필요한 정보 입력
key = "dmuCB2wfe1qfcAIz42ts%2Be%2Fy5OVJaYeIINrowE2jZX0%2BuegviFtNclH8saHau%2BqjCMwcdtxJgNKRqlVIpPNdgg%3D%3D" # 발급받은 Key
pageNo = 0 # 요청 변수 : 페이지 번호 입력
row = 100 # 요청 변수 : 한 페이지 결과 수 입력

url = f'http://api.data.go.kr/openapi/tn_pubr_public_unmanned_traffic_camera_api?serviceKey={key}&pageNo={pageNo}&numOfRows={row}&type=json'

response = requests.get(url)

response.encoding = 'utf-8'

print(response.text[0:400])
# 출력 결과
{"response":{"header":{"resultCode": "30","resultMsg":"SERVICE KEY IS NOT REGISTERED ERROR."}}}

 

# 결과 객체에 있는 데이터(json) 조회
resulting_dict = json.loads(response.text) # json을 dict 타입으로 바꾸는 함수
# print(resulting_dict['header'])
resulting_dict.keys() # dictionary 키 확인 --> 중첩 딕셔너리임
# 출력 결과
dict_keys(['response'])

 

# 중첩 딕셔너리의 키 확인
resulting_dict['response'].keys()
# 출력 결과
dict_keys(['header'])

 

resulting_dict['response']['body'].keys()
# 출력 결과
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

~\AppData\Local\Temp\ipykernel_11524\3251058356.py in <module>
----> 1 resulting_dict['response']['body'].keys()


KeyError: 'body'

 

resulting_dict['response']['body']['items'][0]
# 주소, 카메라 위치, 위도, 경도의 정보만 출력

address_list = []
location_list = []
latitude_list = []
longitude_list = []

# dictionary 속 데이터 정보 입력
for tmp in resulting_dict['response']['body']['items']:
    address_list.append(tmp['rdnmadr'])
    location_list.append(tmp['itlpc'])
    latitude_list.append(tmp['latitude'])
    longitude_list.append(tmp['longitude'])

print(address_list[:10])
print(location_list[:10])
print(latitude_list[:10])
print(longitude_list[:10])
# dataframe으로 변환
df = pd.DataFrame({
    'address' : address_list,
    'location' : location_list,
    'latitude' : latitude_list,
    'longitude' : longitude_list
})

df

'Activity > KT AIVLE' 카테고리의 다른 글

[사전 학습] 1-3 데이터 합치기  (3) 2024.08.31
[사전 학습] 1-1 데이터 선택  (0) 2024.08.13
Comments