前提・実現したいこと
ここに質問の内容を詳しく書いてください。
表にあるNaNを0に変えたいと考えています。
該当のソースコード
python
1import time#時間のモジュール 2from selenium import webdriver #ブラウザの自動操作 3import pandas as pd #データ分析 4import numpy as np #多次元配列の高速計算 5from matplotlib import pyplot as plt #グラフの描写 6%matplotlib inline 7from tqdm import tqdm#for文の時間管理 8from selenium.webdriver.chrome.options import Options 9 10# --headlessだけではOSによって動かない、プロキシが弾かれる、 11# CUI用の省略されたHTMLが帰ってくるなどの障害が出ます。 12# 長いですが、これら6行あって最強かつどんな環境でも動きますので、必ず抜かさないようにしてください。 13op = Options() 14op.add_argument("--disable-gpu"); #計算方法の指定 15op.add_argument("--disable-extensions"); #すべての拡張機能を無効にします 16op.add_argument("--proxy-server='direct://'"); # 17op.add_argument("--proxy-bypass-list=*"); # 18op.add_argument("--start-maximized"); #画面サイズを最大化してブラウザを起動 19op.add_argument("--headless"); #ヘッドレスChromeとして起動 20 21#driver = webdriver.Chrome() 22driver = webdriver.Chrome(chrome_options=op)#driverの指定 23time.sleep(2) #休憩 24 25columnNames=[] 26ETFComparisonsTable=[] 27for number in tqdm(range(0,3)): 28 driver.get("https://kabuoji3.com/stock/") #とってくるurlの指定 29 stockSearch=driver.find_element_by_class_name("form_inputs") #find_element_by_class_nameの引数にクラス属性名を指定すると要素を取得出来る 30 stockSearchForm=stockSearch.find_element_by_class_name("form_txt") #上と一緒 31 stockSearchForm.send_keys("ETF") #要素に対して特殊キーを入力することができます 32 btnClick=driver.find_element_by_class_name("btn_submit") #上と一緒 33 btnClick.click() #btnClickをクリック 34 35 36 #choose a stock out of list 37 stockClick=driver.find_elements_by_class_name("clickable")#上と一緒 38 stockClick[number].find_element_by_tag_name("a").click()#for文のnumberを取得してaをクリック 39 40 stockTable=driver.find_element_by_class_name("table_wrap")#上と一緒 41 stockLine=stockTable.find_elements_by_tag_name("tr") #find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 42 43 #price scraping with calculation 44 if len(stockLine)==302: #リストの要素を数えて302の場合 45 ETFComparisons=[] 46 for kabuka in range(2,152):#2から152 47 stockETFPriceAfter=stockLine[kabuka-1].find_elements_by_tag_name("td")#一日後のtd 48 stockETFPriceBefore=stockLine[kabuka].find_elements_by_tag_name("td")#一日前のtd 49 ETFComparison=float(stockETFPriceAfter[6].text)-float(stockETFPriceBefore[6].text)#終値調整の値の前後を計算 50 ETFComparisons.append(ETFComparison)#ETFComparisonsにETFComparisonを追加 51 52 stockETFPriceAfter=stockLine[151].find_elements_by_tag_name("td")#一日前のtd 53 stockETFPriceBefore=stockLine[153].find_elements_by_tag_name("td")#一日後のtd 54 ETFComparison=float(stockETFPriceAfter[6].text)-float(stockETFPriceBefore[6].text)#終値調整の値の前後を計算 55 ETFComparisons.append(ETFComparison)#ETFComparisonsにETFComparisonを追加 56 57 for kabuka in range(154,302): 58 stockETFPriceAfter=stockLine[kabuka-1].find_elements_by_tag_name("td")#一日前のtd 59 stockETFPriceBefore=stockLine[kabuka].find_elements_by_tag_name("td")#一日後のtd 60 ETFComparison=float(stockETFPriceAfter[6].text)-float(stockETFPriceBefore[6].text)#終値調整の値の前後を計算 61 ETFComparisons.append(ETFComparison)#ETFComparisonsにETFComparisonを追加 62 63 ETFComparisonsTable.append(ETFComparisons)#まとめ 64 65 #pick up title タイトルの取得 66 stockTitleBox=driver.find_element_by_class_name("base_box_ttl") 67 stockTitle=stockTitleBox.find_element_by_class_name("jp").text 68 columnNames.append(stockTitle) 69 70#making ETF table ETFの表作り 71ETFTable=pd.DataFrame(ETFComparisonsTable) 72ETFTable=ETFTable.T 73ETFTable.columns=columnNames 74 75#checking ETF table確認 76ETFTable.tail() 77 78#date scraping 79driver.get("https://kabuoji3.com/stock/{}/".format(4307))#4307のページのurlを検索 80stockTable=driver.find_element_by_class_name("table_wrap")#find_element_by_class_nameの引数にクラス属性名を指定すると要素を取得出来る 81stockLine=stockTable.find_elements_by_tag_name("tr")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 82 83dates=[] 84for kabuka in range(1,152):#1から152 85 stockDate=stockLine[kabuka].find_elements_by_tag_name("td")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 86 stockDate=stockDate[0].text#textの取得 87 dates.append(stockDate)#datesにstockDateを追加 88 89for kabuka in range(153,302):#153から302 90 stockDate=stockLine[kabuka].find_elements_by_tag_name("td")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 91 stockDate=stockDate[0].text#textの取得 92 dates.append(stockDate)#datesにstockDateを追加 93 94df_date=pd.DataFrame()#変数の宣言 95#日付をまとめている 96df_date["date"]=dates#dateのリストを変数にして受け取ってる 97df_date["year"]=df_date["date"].apply(lambda x:int(x.split("-")[0])) 98df_date["month"]=df_date["date"].apply(lambda x:int(x.split("-")[1])) 99df_date["day"]=df_date["date"].apply(lambda x:int(x.split("-")[2])) 100 101df_date.tail()#確認 102 103#stock scraping (comparison with yesterday) 104driver.get("https://kabuoji3.com/stock/{}/".format(4307))#4307のページのurlを検索 105stockTable=driver.find_element_by_class_name("table_wrap")#find_element_by_class_nameの引数にクラス属性名を指定すると要素を取得出来る 106stockLine=stockTable.find_elements_by_tag_name("tr")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 107 108targetStockComparisons=[] 109for kabuka in range(2,152):#2から152 110 targetStockPriceAfter=stockLine[kabuka-1].find_elements_by_tag_name("td")#一日後のtd 111 targetStockPriceBefore=stockLine[kabuka].find_elements_by_tag_name("td")#一日前のtd 112 targetStockComparison=float(targetStockPriceAfter[6].text)-float(targetStockPriceBefore[6].text)#終値調整の値の前後を計算 113 targetStockComparisons.append(targetStockComparison)#targetStockComparisonsにtargetStockComparisonを追加 114 115targetStockPriceAfter=stockLine[151].find_elements_by_tag_name("td")#一日後のtd 116targetStockPriceBefore=stockLine[153].find_elements_by_tag_name("td")#一日前のtd 117targetStockComparison=float(targetStockPriceAfter[6].text)-float(targetStockPriceBefore[6].text)#終値調整の値の前後を計算 118targetStockComparisons.append(targetStockComparison)#targetStockComparisonsにtargetStockComparisonを追加 119 120for kabuka in range(154,302):#154から302 121 targetStockPriceAfter=stockLine[kabuka-1].find_elements_by_tag_name("td")#一日後のtd 122 targetStockPriceBefore=stockLine[kabuka].find_elements_by_tag_name("td")#一日前のtd 123 targetStockComparison=float(targetStockPriceAfter[6].text)-float(targetStockPriceBefore[6].text)#終値調整の値の前後を計算 124 targetStockComparisons.append(targetStockComparison)#targetStockComparisonsにtargetStockComparisonを追加 125 126 #題名の指定 127df=pd.DataFrame(targetStockComparisons) 128df.columns=["(株)野村総合研究所:前日比"] 129df.head() 130 131#add table 表の合体 132stockPriceTable=pd.concat([df_date,ETFTable],axis=1) 133stockPriceTable=pd.concat([stockPriceTable,df],axis=1) 134stockPriceTable.head() 135 136#prepare for making target values 名前作り 137df_next=df.copy() 138df_next.columns=["(株)野村総合研究所:翌日比"] 139 140#date scraping for target values 141driver.get("https://kabuoji3.com/stock/{}/".format(4307))#4307のページのurlを検索 142stockTable=driver.find_element_by_class_name("table_wrap")#find_element_by_class_nameの引数にクラス属性名を指定すると要素を取得出来る 143stockLine=stockTable.find_elements_by_tag_name("tr")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 144 145dates=[] 146for kabuka in range(2,152):#2から152 147 stockDate=stockLine[kabuka].find_elements_by_tag_name("td")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 148 stockDate=stockDate[0].text#題名をテキスト形式で取得 149 dates.append(stockDate)#datesにstockDate 150 151for kabuka in range(153,302):#153から302 152 stockDate=stockLine[kabuka].find_elements_by_tag_name("td")#find_element_by_tag_nameの引数にタグ属性名を指定すると要素を取得出来る 153 stockDate=stockDate[0].text#題名をテキスト形式で取得 154 dates.append(stockDate)#datesにstockDate 155 156 157#dateのリストのまとめ 158df_date2=pd.DataFrame() 159df_date2["date"]=dates 160 161#making target values table ターゲットの表を作る 162df_next=pd.concat([df_date2,df_next],axis=1) 163df_next.index=df_date2["date"] 164 165#prepare for complete table 完全体の表の準備 166table=stockPriceTable[0:299].copy() 167table.index=table["date"] 168 169#making complete table 完全体の表の作成 170table["(株)野村総合研究所:翌日比"]=df_next["(株)野村総合研究所:翌日比"] 171 172table.fillna(0) 173table.head() 174
試したこと
最後の行のtable.headで表を出力したのですがNaNがでました。
それを消そうとfillnaを使ったのですがNaNが消えません。
補足情報(FW/ツールのバージョンなど)
非常に長く、質問下手で申し訳ありません
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/28 04:00