简体   繁体   English

我收到以下错误:“ValueError: Must pass 2-d input.shape=(1, 3, 1)”但我正在传递一个 2-d 输入。 这里发生了什么?

[英]I am getting the following error: "ValueError: Must pass 2-d input. shape=(1, 3, 1)" but I am passing a 2-d input. What is happening here?

My entire code is below.我的整个代码如下。 However, read my whole post since much of it works well enough.但是,请阅读我的整篇文章,因为其中大部分内容都足够好。

from selenium import webdriver
import os
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
import openpyxl
import pandas as pd
import numpy as np

trade_date_lim = "5/1/2021"


chrome_driver = os.path.abspath('C:/Users/ross/Desktop/chromedriver.exe')
browser = webdriver.Chrome(chrome_driver)


#path is workbook I want to read from, eventually write to
path = r"C:\Users\ross\Desktop\reit.xlsx"
workbook = openpyxl.load_workbook(path)
sheet = workbook["Tickers"]
max_rows = sheet.max_row
ticker_array = []

for row in range(2, max_rows + 1):
    ticker = sheet.cell(row=row, column=1)
    ticker_array.append(ticker.value)


wait = WebDriverWait(browser, 10)
symbol_array = []

for stock in ticker_array:
    browser.get('https://finra-markets.morningstar.com/BondCenter/Default.jsp')

    #using clicks and send_keys, gets the bond page for a desired stock
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,
                                           '#TabContainer > div > div.rtq-tab-wrap > div.rtq-tab-menus-wrap > ul > li:nth-child(3) > a > span'))).click()
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#firscreener-cusip'))).send_keys(stock)

    try:
        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.qs-no-info")))
    except TimeoutException:
        pass

    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,
                                           "#ms-finra-advanced-search-form > div.ms-finra-advanced-search-btn > input:nth-child(2)"))).click()
    try:
        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-agreement > input"))).click()
    except TimeoutException:
        pass

    #clicks to sort by earliest date, clicks again to sort by latest maturity
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-grid-hd > div > div:nth-child(7) > div"))).click()
    time.sleep(5)
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-grid-hd > div > div:nth-child(7) > div"))).click()
    time.sleep(5)
    #gathers all bond offerings on first page
    whole_chart = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll"))).text

    #gets number of bonds listed on page so we can iterate through them. Some pages have differing number of bonds listed. Most on page is 20
    parent = browser.find_element_by_xpath('//*[@id="ms-finra-search-results"]/div/div[3]/div[1]/div[1]/div[2]/div[2]/div')
    count_divs = len(parent.find_elements_by_xpath("./div"))

    bnd_off_cnt = 1
    row_num = 0

    while row_num < count_divs and bnd_off_cnt < 3:

        #gets values that I'm looking for
        symbol = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll > div > div:nth-child(" + str(row_num + 1) + ") > div:nth-child(3)"))).text
        maturity = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll > div > div:nth-child(" + str(row_num + 1) + ") > div:nth-child(7)"))).text
        moody_rating = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll > div > div:nth-child(" + str(row_num + 1) + ") > div:nth-child(8)"))).text
        sandp_rating = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll > div > div:nth-child(" + str(row_num + 1) + ") > div:nth-child(9)"))).text
        stated_bond_yield = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll > div > div:nth-child(" + str(row_num + 1) + ") > div:nth-child(11)"))).text

        #looks to see if all values are non-empty and if moody rating and sandp rating are not equal to 'WR' and 'NR'
        if symbol.strip() and maturity.strip() and moody_rating.strip() and sandp_rating.strip() and stated_bond_yield.strip() and moody_rating != "WR" and sandp_rating != "NR":
            #bond detail page below
            element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-finra-search-results > div > div.qs-resultData > div.qs-resultData-body > div.rtq-grid.rtq-grid-auto-h > div.rtq-scrollpanel > div.rtq-grid-scroll > div > div:nth-child(" + str(row_num + 1) + ") > div:nth-child(2) > div > a")))
            element_link = element.get_attribute('href') #gets the link

            #opens window, switches to it and opens the bond detail page
            browser.execute_script("window.open('');")
            time.sleep(3)
            browser.switch_to.window(browser.window_handles[1])
            browser.get(element_link)

            #switch to iframe on second page and clicks it
            wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "ms-bond-detail-iframe")))
            wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#tradeHistory_link"))).click()
            #switches to third page
            browser.switch_to.window(browser.window_handles[-1])
            #sleeps for 3 seconds so we know for sure that we are working on right page
            time.sleep(3)


            # get length of table on trades page and iterate through them trying to find the most recent "Trade" status
            bond_trades = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#ms-glossary > div > table > tbody > tr")))
            count = len(bond_trades)


            for trade in range(count):

                bond_trade_status = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-glossary > div > table > tbody > tr:nth-child(" + str(trade + 1) + ") > td:nth-child(4) > div"))).text
                if bond_trade_status == "Trade":
                    bond_last_traded = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-glossary > div > table > tbody > tr:nth-child(" + str(trade + 1) + ") > td:nth-child(1) > div"))).text
                    if bond_last_traded > trade_date_lim:
                        #prior bond yields occasionally don't match the yield that it was last traded at
                        bond_yield = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#ms-glossary > div > table > tbody > tr:nth-child(" + str(trade + 1) + ") > td:nth-child(7) > div"))).text
                        symbol_array.append(symbol)
                        bnd_off_cnt += 1
                        break
                    else:
                        continue
                    #test for if we are within X amount of time from today
                    #continue if we are more than that amount of time
                    #exit if we are within time frame and get 'Yield'
                else:
                    continue
            browser.switch_to.window(browser.window_handles[2])
            browser.close()
            browser.switch_to.window(browser.window_handles[1])
            browser.close()
            browser.switch_to.window(browser.window_handles[0])
        row_num += 1


np_symbol_arr = np.array(symbol_array)

np_symbol_arr.resize((3,1))
print(np_symbol_arr.shape)
print(np_symbol_arr)


df = pd.DataFrame([np_symbol_arr])

path = r"C:\Users\ross\Desktop\reit.xlsx"
book = openpyxl.load_workbook(path)
writer = pd.ExcelWriter(path, engine="openpyxl")
writer.book = book

df.to_excel(writer, sheet_name="Healthcare")
writer.save()

I am getting an error on this line near the very bottom of my code: df = pd.DataFrame([np_symbol_arr]) .我在代码最底部附近的这一行出现错误: df = pd.DataFrame([np_symbol_arr]) The lines previous I print out the shape of the numpy array and the values in the numpy array.前面的行我打印出 numpy 数组的形状和 numpy 数组中的值。 The shape is (3, 1) and the values are as follows:形状为 (3, 1),取值如下:

[['NHI5113928']
 ['MPW5083277']
 ['MPW4860582']]

So it looks like I am passing a 2-d array (or so I think).所以看起来我正在传递一个二维数组(或者我认为)。 What is going on here?这里发生了什么? Why does it think I'm passing a 1, 3, 1 array?为什么它认为我正在传递一个 1、3、1 数组?

Error type: ValueError: Must pass 2-d input.错误类型:ValueError:必须通过二维输入。 shape=(1, 3, 1)形状=(1, 3, 1)

Any and all help appreciated!任何和所有的帮助表示赞赏!

Ross罗斯

Is it because you have embedded your array inside another Python list.是不是因为您已将阵列嵌入另一个 Python 列表中。 That becomes the 1st dimension.这成为第一个维度。 Change your call to将您的呼叫更改为

df = pd.DataFrame(np_symbol_arr)

without the extra brackets.没有额外的括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ValueError:必须通过二维输入。 形状=(430, 430, 3) - ValueError: Must pass 2-d input. shape=(430, 430, 3) ValueError:必须通过二维输入。 形状=(1, 50, 2) - ValueError: Must pass 2-d input. shape=(1, 50, 2) 无法将列表转换为 dataframe。 不断收到错误“ValueError:必须通过二维输入。 形状=(1, 4, 5)” - Unable to convert a list into a dataframe. Keep getting the error “ValueError: Must pass 2-d input. shape=(1, 4, 5)” 我正在尝试使用 scipy.hstack 堆叠一维特征。 但是得到“ValueError:blocks must be 2-D”。 有什么建议么? - I am trying to stack 1D features using scipy.hstack. But getting "ValueError: blocks must be 2-D" . Any suggestions? 一些输入的 output 应该是“错误的数字”,但我没有得到那个输入。 我究竟做错了什么? - The output for some of the inputs should be ‘Wrong number’ but I am not getting that input. What am I doing wrong? 三维熊猫DataFrame错误“必须通过二维输入” - Three Dimensional Pandas DataFrame Error “Must Pass 2-D Input” 计算余弦相似度:ValueError: Input must be 1- or 2-d - Calculating cosine similarity: ValueError: Input must be 1- or 2-d 我正在尝试在Python中创建Eratosthenes的筛子,但程序仍返回原始输入。 怎么了? - I am trying to create the sieve of Eratosthenes in Python but the program still returns the original input. What is wrong? 这个Python斐波那契数字函数会为任何输入产生0.0。 我究竟做错了什么? - This Python fibonacci number function produces 0.0 for any input. What am I doing wrong? 尝试进行二维随机游走 function,为什么会出现“+: 'float' 和 'NoneType' 不支持的操作数类型”错误? - Trying to make a 2-D random walk function, why am I getting "unsupported operand type(s) for +: 'float' and 'NoneType'" error?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM