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. 코드를 이미지가 아닌 텍스트로 넣어주세요. 2. apikey 를 이런식으로 노출되면 악용될 수 있겠습니다. nowp 2019.8.11 20:08
  • 감사합니다. 처음으로 가입해서 질문해서 미숙했습니다. 알 수 없는 사용자 2019.8.12 11:46
  • 저기.. 죄송한데 apikey가 없으니... 소스가 안돌아가구요... 현재 어떤식으로 출력되고 있는지를 모르겠어서 도움을 줄 수가 없어요... 출력값이 어떻게 나오는지에 대한 사진이나 자세한 설명 부탁드려요 ohsangyun 2019.8.12 21:12
  • 만약 000~099 까지의 숫자에 대해서 '한글' 이라는 결과를 출력하고 싶다면, if문을 써서 "100으로 나눈 나머지가 0이면 '한글'을 출력해라" 이런식으로 하면 되지 않을까요? ohsangyun 2019.8.12 21:13

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   불어
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)