table 에서 NaN 으로 뜨는 값을 0으로 바꿀 수 있을까요?
조회수 441회
import pandas as pd
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
import time
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml")
table = soup.find_all("table")
df = pd.read_html(str(table))
print(df[4])
ja = df[4].iloc[4, 2]
이 데이터프레임에서 NaN 으로 표시되는 값을 0이라는 정수값으로 불러오고 싶습니다. NaN이 정확하게 뭔지를 몰라서 어떻게 해야할지 모르겠네요. 답변해주시면 감사하겠습니다.~~
혹시나 하고 해당사이트에서 개발자모드에서 확인해 본걸로는 NaN에 해당하는 공백이
& nbsp;
(& 와 nbsp; 사이엔 실제로 공백이 없는데, 사이트대로 치면 글이 안쳐져서...)
로 나옵니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
pandas에서 데이터프레임 안의 모든 NaN 값을 0으로 바꾸고 싶으면 아래와 같이 하면 됩니다.
df.fillna(0)
아래 코드 참고하세요.
- 코드
import pandas as pd import requests from bs4 import BeautifulSoup url = "http://comp.fnguide.com/SVO2/ASP/SVD_Main.asp?pGB=1&gicode=A005390&cID=&MenuYn=Y&ReportGB=&NewMenuID=101&stkGb=701" res = requests.get(url) soup = BeautifulSoup(res.content, "lxml") table = soup.find_all("table") df = pd.read_html(str(table)) print(df[4]) for i in range(len(df)): df[i].fillna(0,inplace=True) print(df[4])
-결과
-
(•́ ✖ •̀)
알 수 없는 사용자
- AttributeError: 'list' object has no attribute 'fillna' 알 수 없는 사용자 2021.1.16 21:00
- 써주신 대로 했는데 위와 같은 오류가 발생합니다... 알 수 없는 사용자 2021.1.16 21:01
- 질문에서는 데이터프레임이라고 하셨는데, 오류 내용대로라면 데이터 프레임이 아니고 리스트인 것 같네요. 알 수 없는 사용자 2021.1.16 21:33
- df.fillna(0)를 print(df[4])하기 바로 전에 사용하시것 맞나요? 혹시 그냥 첫줄에 쓴건 아닌가요? 알 수 없는 사용자 2021.1.16 21:35
- 리스트를 데이터프레임으로 바꾸고 싶으면 예를 들어 x=pd.DataFrame(리스트) 하시면 데이터 프레임 x가 얻어지고요. 이렇게 얻어진 데이터프레임 x에서 NaN을 0으로 바꾸려면 x.fillna(0) 하시면 됩니다. 알 수 없는 사용자 2021.1.16 21:36
- 리스트일지도 모른다고 하셔서 df_4 = pd.DataFrame(df[4]) df_4.fillna(0) 라고 해봤어요. 여기까지 하고 터미널에서 돌리면 문제가 없는데, 프린트 하면 여전히 NaN 값이 뜹니다.... 알 수 없는 사용자 2021.1.16 21:56
- pd.read_html 함수가 데이터 프레임의 리스트를 반환하네요. 답변 본문에 소스 코드와 결과를 추가해서 넣었으니 확인해 보세요. 알 수 없는 사용자 2021.1.16 22:05
- 정말 감사드립니다.~~~ 이거 관련된거 해결하느라 3일 걸렸거든요~~^^ 행복한 주말 되세요~~~ 알 수 없는 사용자 2021.1.16 22:14
댓글 입력