🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1013閲覧

NaNを0に置換したいです。

kuro46

総合スコア6

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/11/27 07:00

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

表にある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/ツールのバージョンなど)

非常に長く、質問下手で申し訳ありません
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fillnaメソッドはデフォルトでは新しいDataFrameを作成して返します。inplace引数をTrueに設定することでインプレースで処理を行えます。

python

1table.fillna(0, inplace=True)

pandas.DataFrame.fillna — pandas 0.25.3 documentation

投稿2019/11/27 09:21

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuro46

2019/11/28 04:00

回答ありがとうございます。 思った通りの操作ができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問