85732


Pythonのpandasのライブラリを使って  
任意の位置の値に代入したいです。

ExcelからYahooの交通費検索して取得した金額の値を  
金額の列に値を入力したいです。  
既に入力しているもの除外しております。

**Excel Data**

出発 | 到着 | 金額 | 備考  
---|---|---|---  
東京 | 品川 |  |  
池袋 | 浅草 |  |  
新宿 | 五反田 | 168 | 20211222利用済み  
  
**実現結果のExcel Data**

出発 | 到着 | 金額 | 備考  
---|---|---|---  
東京 | 品川 | 168 |  
池袋 | 浅草 | 336 |  
新宿 | 五反田 | 168 | 20211222利用済み  
  
下記の方法で行いましたが、  
金額の列に上手く代入できないです。

どのように修正すれば良いか。教えていただけますか。

調べながらやっておりますので、locの代入指定のところがおかしいと思います。  
現在下記の結果になります。

[code]

    #取得した値を金額列へ入力
    df.loc['金額'] = kingaku
    
[/code]

** **現在結果**

出発 | 到着 | 金額 | 備考  
---|---|---|---  
東京 | 品川 |  |  
池袋 | 浅草 |  |  
336 | 336 | 336 | 336  
  
code

[code]

    import pandas as pd
    from datetime import datetime as dt, date, timedelta
    from selenium import webdriver
    from bs4.element import Comment
    from selenium.webdriver.common.keys import Keys
    import time
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.remote.webelement import WebElement
    from selenium.common.exceptions import NoSuchElementException
    
    #FILE読込
    file_time= dt.now().strftime("%Y%m%d")
    filename="C:\\Users\\test\\Documents\\test\\test.xlsx"
    
    #エクセル読込
    df = pd.read_excel(filename,sheet_name ='test',dtype=str)
    
    #空白の行のみ選択
    df= df[df['金額'].isnull()]
    print(df)
    
    #出発の値読み込み
    df_from = df["出発"]
    #到着の値読み込み
    df_to =  df["到着"]
    
    #エクセルの長さ読み込み
    df_cnt = len(df)
    
    #headless background 
    option = Options()
    #option.add_argument('--headless')
    
    #Getting Default Adapter failed error message
    option.add_experimental_option('excludeSwitches', ['enable-logging'])
    
    #strDate = dt.now().strftime("%Y%m%d")
    
    #路線情報（乗換案内・時刻表・路線図）
    URL= "https://transit.yahoo.co.jp/"
    
    # ブラウザを開く。 #options=option background 
    driver = webdriver.Chrome(executable_path="C:\\Program Files\\chromedriver_win32\\chromedriver.exe",options=option)
    
    for x in range(df_cnt):
    
     # Googleの検索TOP画面を開き、路線情報（乗換案内・時刻表・路線図）へ遷移
     driver.get(URL)
     
     #2秒待機
     time.sleep(2)
     
     #出発要素
     SearchfromTxt = driver.find_element_by_name('from')
     
     #到着要素
     SearchtoTxt = driver.find_element_by_name('to')
     
     #出発到着テキスト入力
     SearchfromTxt.send_keys(df_from[x])
     SearchtoTxt.send_keys(df_to[x])
     #検索
     SearchtoTxt.submit()
     
     #4秒待機
     time.sleep(4)
    
     #料金の安い順位をクリック
     yasui = driver.find_element_by_xpath('//*[@id="tabflt"]/li[3]/a')
     yasui.click()
     
     #金額取得
     kingaku=driver.find_element_by_class_name('fare').text.replace('円','').replace(',','')
     print(kingaku)
     
     #取得した値を金額列へ入力
     df.loc['金額'] = kingaku
    
     # EXCEL保存  
     df.to_excel(filename,sheet_name="test",header=True,index=False)
     
     #繰り返し----------------------------------------------------------------
     
     
    
[/code]

もし分かる方がいましたら、教えていただけると幸いです。

よろしくお願い致します。


CC BY-SA 4.0
2022-01-16T06:36:20.670
85728
2022-01-18T04:18:13.383
2022-01-16T08:05:22.427
3060
18859
question
python python3 pandas
pandasで任意の位置の値に代入locの利用方法について


pandas documentation には  
[pandas.DataFrame.loc](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.loc.html)

> Access a group of rows and columns by label(s) or a boolean array.

rows と columns でアクセス, と記されています。

なので,

[code]

    import pandas as pd
    import io
    csv = io.StringIO('''
    出発,到着,金額
    東京,品川,
    池袋,浅草,
    新宿,五反田,
    ''')
    df = pd.read_csv(csv)
    df_from = df["出発"]
    df_to =  df["到着"]
    
    df.loc[df_from == '池袋', '金額'] = 123
    display(df)#print(df.to_markdown())
    
[/code]

| 出発 | 到着 | 金額  
---|---|---|---  
0 | 東京 | 品川 | nan  
1 | 池袋 | 浅草 | 123  
2 | 新宿 | 五反田 | nan  
  
* * *

#### 追記

オリジナルデータを残したまま加工したい場合は

  * もとの DataFrameを更新せず, その都度データ選別行うか
  * 別の変数に DataFrameをセットする

[code]

    display(df[df['金額'].isnull()])
    # あるいは
    dfnull = df[df['金額'].isnull()]
    display(dfnull)
    
[/code]

保存時にファイルを上書きしないようにするには `df.to_excel` で  
新規ファイル名を指定するか,  
あるいはシート名を変えるとよいでしょう


CC BY-SA 4.0
2022-01-16T09:13:58.597
85732
2022-01-18T04:18:13.383
2022-01-18T04:18:13.383
43025
43025
85728
answer