데이터 꿈나무
[사전학습] 1-2 데이터 변경 본문
데이터 변경
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