inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[Python 실전] 웹크롤링과 데이터분석 : 전세계 축구 선수 몸값 분석

데이터 뜯어보고 맛보기

df.info에서 자료형태 질문있습니다.

236

JAE-HOON JEONG

작성한 질문수 1

0

안녕하세요! 강의 정말 잘 듣고 있습니다. df.info 입력했을 때 값이 달라서 질문드려요. 먼저 df.info 했을 때 결과값 보여드릴게요.

<class 'pandas.core.frame.DataFrame'> RangeIndex: 100 entries, 0 to 99 Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 ranking 100 non-null object 1 name 100 non-null object 2 position 100 non-null object 3 age 100 non-null object 4 nation 100 non-null object 5 team 100 non-null object 6 value 100 non-null object dtypes: object(7) memory usage: 5.6+ KB

number와 age가 문자형태인 object로 나옵니다.

df.describe를 했을 때, 평균이나 최빈값, 최대값 등이 안나와서 의아했는데 다 문자로 되어있어서 그랬나봐요. 그래서 본론인 질문드립니다.

질문 1. object로 읽었을 때 int64로 바꾸는 방법이 있는지 궁금해요. 불러들인 a[0].text, a[5].text에 int를 씌우면 되네요(수정).

질문 2. 제껀 왜 object로 읽힌걸까요? 입력한 값 아래 기입해두겠습니다. 좋은 강의 너무 감사합니다. :)

for i in range(1, 5):
url = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={}".format(i)
# 여길 바꿔줘야 한다.
# f ~ {i}는 변수처리를 의미한다.
# 반복문을 통해 원하는 페이지까지 스크롤링하도록 i값을 메기면 된다.
# url = f"https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={i}"
r = requests.get(url, headers=headers)
r.status_code

soup = BeautifulSoup(r.text, 'html.parser')
# 여기까지가 뷰티풀숲 사용하기 위한 준비

player_info = soup.find_all('tr', class_=['odd', 'even'])
# 데이터 구조가 1, 2페이지 같은지 확인 한번 해보기!

# ranking = []
# name = []
# position = []
# age = []
# nation = []
# team = []
# value = []
# 반복문에 리스트형을 만들면 계속 리스트가 빈 것으로 갱신되어 리스트 내 값이 쌓이지 않아. 리스트는 반복문 앞으로 빼준다.

for i in player_info:
a = i.find_all('td')
ranking = a[0].text
name = a[3].text
position = a[4].text
age = a[5].text
nation = a[6].img['alt']
team = a[7].img['alt']
value = a[8].text.strip()

player_list.append([ranking, name, position, age, nation, team, value])

time.sleep(2)



# 데이터프레임을 만드는 과정엔 반복이 필요하지 않으니 나와줘야.
# 반복은 페이지에서 정보를 빼오고 이를 리스트로 만드는 과정까지만
# 반복문을 사용할 땐 정확히 어느 과정까지 반복이 필요한지 명확히 해놔야 편해.
df3 = pd.DataFrame(player_list, columns=['ranking', 'name', 'position', 'age', 'nation', 'team', 'value'])
df3

웹-크롤링 python pandas beautifulsoup

답변 0

supabase_key 관련

0

2

0

프롬프트의 영문 버전을 만들 때, 출력 규칙에 포함된 한글 부분은 영어로 번역하지 않고 그대로 유지하면서, 영문 편과 한글 편을 한 번에 함께 출력하려면 어떤 워크플로우로 구성하면 좋을까요?

0

8

0

프로그램은 뭘 사용하시는 건가요??

1

10

2

수업자료와 노션 공유 문제

0

18

3

python run.py 실행시 에러 문제

1

40

2

조건 반복문 질문: for 문 ?

0

27

0

54강 4분 41초에서 질문 있어요.

0

29

1

커서창

1

38

2

강의 제작

1

37

1

23강 질문드립니다, 강사님.

0

24

1

import

0

26

1

45강 예제4번에서 질문 있어요!

0

39

1

45강 강의 10분 03초 내용에서 x + 1 을 하는 이유는 뭔가요?

0

32

1

깃허브에서 csv파일 불러오기 오류 문의

0

563

2

국적 2개 출력

0

256

1

player_info =soup.find_all('tr' ) 로 선수 정보를 뽑지 않은 이유

0

277

0

9:57 데이터 변경 .astype()

0

223

0

수업 듣던중 오류가 발생하여 문의드립니다. 확인 부탁드려요ㅜㅜ

0

213

0

player_info = soup.find_all('tr', class_ = ['odd', 'even]) 함수가 동작하지 않습니다.

0

383

1

error

0

223

0

transfermarkt.com 페이지에 대해서 status_code가 404로 오류가 나타납니다.

0

252

0

강의 10:00 분쯔음 player 에 값 넣기

0

464

1

질문있어요!

0

404

2

number.append질문

0

528

5