Python3 코드 관련 질문....
조회수 513회
//여기에 코드를 입력하세요
import datetime # 4주간의 Top20 통계를 위한 API실시간을 위한 일자 처리
now = datetime.datetime.now() # 현재 일자
weeks4 = now + datetime.timedelta(weeks=-4) #현재 일자 - 4주
startDt = '%04d-%02d-%02d' % (weeks4.year, weeks4.month, weeks4.day)
endDt = '%04d-%02d-%02d' % (now.year, now.month, now.day) # 현재 일자에서 년,월,일만 출력되도록
apiKey = #APIKey 변수
top20_url = f"http://data4library.kr/api/loanItemSrch?authKey={apiKey}&startDt={startDt}&endDt={endDt}&pageSize=20" #API호출 주소 top20_url변수에 저장
import pandas as pd
from bs4 import BeautifulSoup # 태그 파싱하기 위해 필요
from urllib.request import urlopen #Url주소를 불러오기 위해 필요
data = urlopen(top20_url).read() #top20_url을 읽어서 data변수에 저장
soup = BeautifulSoup(data, "html.parser") #BeautifulSoup를 통해 형식 parser
bookitem = soup.find("docs") # Tag에 docs태그를 찾아 bookitem에 저장
df = pd.DataFrame(columns=['순위', '책', '카테고리(종류)', '대여 수', 'ISBN']) #빈 데이터 프레임 생성
i = 0 # i 초기값
for items in bookitem.findAll("doc"): # bookitem에 저장되어있는 docs태그에서 doc태그를 찾아서 items에 넣음
df.loc[i] = [items.ranking.text, items.bookname.text, items.class_no.text, items.loan_count.text, items.isbn13.text]
i=i+1
df
위 사진 처럼 코딩을 했습니다. 출력에서 카테고리(종류)는 000~999까지 있습니다.
그래서 000~099 : 한글 / 100~199 : 영어 / 800~899 : 사회 이런식으로 바뀌어서 출력을 하고싶습니다.
여러가지 해보았는데... 잘 모르겠습니다..ㅠㅠㅠㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
pandas.Series 에 apply 라는 메소드가 있습니다. 시리즈의 각 원소에 대해 인자로 주어진 함수를 적용하여, 그 함수의 결과값들의 시리즈를 리턴해 주는 메소드입니다.
pd.Series([1,2,3,4,5]).apply(lambda e: ('짝수', '홀수')[e%2])
를 실행하면,pd.Series([ '홀수', '짝수', '홀수', '짝수', '홀수'])
가 나옵니다.숫자로 주어진 값 또는 문자열에 대해서, 주어진 조건대로 '한글', '영어', '사회' 등을 반환하는 함수를 만들고, 그 함수를 숫자(class_no) 컬럼에 apply 하여, 새로운 컬럼을 만들면 될 것입니다. 아래는 유사하게 샘플을 만들어 idle 에서 실행해 본 예제입니다.
>>> df = pd.DataFrame( { 'cat': [ '%03d'%i for i in pd.np.random.randint(0, 999, size=20) ] } ) >>> df cat 0 624 1 015 2 845 3 420 4 209 5 434 6 895 7 380 8 464 9 030 10 512 11 385 12 727 13 702 14 282 15 344 16 135 17 175 18 367 19 700 >>> def cat2str(cat): cat = int(cat[:3], 10) if cat < 100: s = '한글' elif cat < 300: s = '영어' elif cat < 800: s = '불어' else: s = '몰라' return s >>> df['카테고리'] = df['cat'].apply(cat2str) >>> df cat 카테고리 0 624 불어 1 015 한글 2 845 몰라 3 420 불어 4 209 영어 5 434 불어 6 895 몰라 7 380 불어 8 464 불어 9 030 한글 10 512 불어 11 385 불어 12 727 불어 13 702 불어 14 282 영어 15 344 불어 16 135 영어 17 175 영어 18 367 불어 19 700 불어
댓글 입력