import numpy as np
import pandas as pd
#scrape html from website and store 3rd DataFrame as our stock tickers - this is dictated to us by the structure of the html
stock_list = pd.read_html("https://www.marketwatch.com/tools/industry/stocklist.asp?bcind_ind=9535&bcind_period=3mo")
print(stock_list)

Я хотел преобразовать его в список:

#convert the DataFrame of stocks into a list so we can easily iterate over it
stocks = stock_list[1].dropna()[1:].tolist()
#set empty list o hold the stock price DataFrames that we can later concatenate into a master frame
df_list = []
#not all stocks will return data so set up an empty list to store the stock tickers that actually successfully returns data
used_stocks = []
#iterate over stock tickers in list and download relevant data, storing said data and successfully downloaded tickers along the way
for stock in stocks:
    try:
        data = pd.DataFrame(web.DataReader(stock,data_source='iex',start='01/01/2013')['close'])
        data.columns = [stock]
        df_list.append(data)
        used_stocks.append(stock)
    except:
        pass
#concatenate list of individual tciker price DataFrames into one master DataFrame
df = pd.concat(df_list,axis=1)

Но он возвращает ошибку ниже:

AttributeError: у объекта «DataFrame» нет атрибута «tolist»

Как я должен решить проблему?

0
huzhengyi 25 Апр 2020 в 23:50

2 ответа

Чтобы решить проблему, вы хотите отладить и перейти к строке, где происходит ошибка. Для части, где ваша ошибка, подсказка предоставляется tolist. Это вызвано этой строкой

stocks = stock_list[1].dropna()[1:].tolist()

Вы можете попробовать это

stocks = stock_list[1].dropna()[1:].values.tolist()
print(stocks)

Получаем 10 строк на 2 столбца. А затем вы хотите увидеть, ожидаете ли вы этого, и исправить следующую ошибку.

0
JLi 25 Апр 2020 в 21:10

pd.read_html возвращает список фреймов данных.

Вместо того, чтобы конвертировать его в список, если ваша конечная цель - перебрать этот список, вы можете использовать следующий код.

df_list = []
used_stocks = []

for index, row in stock_list[1].dropna()[1:].iterrows():
    #Get stock from row and process ahead.

0
Ketan Krishna Patil 25 Апр 2020 в 21:14