Список тикеров для получения setor и name

#python #yfinance

#python #yfinance

Вопрос:

    import pandas as pd
import datetime as dt
from pandas_datareader import data as web
import yfinance as yf
yf.pdr_override()
  

filename=r’C:UsersUserDesktopfrom_pythondata_from_python.xlsx ‘

 yeah = pd.read_excel(filename, sheet_name='entry')
stock = []

stock = list(yeah['name'])
stock = [ s.replace('xa0', '') for s in stock if not pd.isna(s) ]


adj_close=pd.DataFrame([])
high_price=pd.DataFrame([])
low_price=pd.DataFrame([])
volume=pd.DataFrame([])

print(stock)


['^GSPC', 'NQ=F', 'AAU', 'ALB', 'AOS', 'APPS', 'AQB', 'ASPN', 'ATHM', 'AZRE', 'BCYC', 'BGNE', 'CAT', 'CC', 'CLAR', 'CLCT', 'CMBM', 'CMT', 'CRDF', 'CYD', 'DE', 'DKNG', 'EARN', 'EMN', 'FBIO', 'FBRX', 'FCX', 'FLXS', 'FMC', 'FMCI', 'GME', 'GRVY', 'HAIN', 'HBM', 'HIBB', 'IEX', 'IOR', 'KFS', 'MAXR', 'MPX', 'MRTX', 'NSTG', 'NVCR', 'NVO', 'OESX', 'PENN', 'PLL', 'PRTK', 'RDY', 'REGI', 'REKR', 'SBE', 'SQM', 'TCON', 'TCS', 'TGB', 'TPTX', 'TRIL', 'UEC', 'VCEL', 'VOXX', 'WIT', 'WKHS', 'XNCR']

for symbol in stock:
    adj_close[symbol] = web.get_data_yahoo([symbol],start,end)['Adj Close']
  

У меня есть список тикеров, у меня есть цена закрытия adj, как можно получить НАЗВАНИЕ и СЕКТОРА этих тикеров?

для одного тикера, который я нашел в Интернете, это можно сделать, как показано ниже

 sbux = yf.Ticker("SBUX")
tlry = yf.Ticker("TLRY")

print(sbux.info['sector'])
print(tlry.info['sector'])
  

Как я могу сделать так, dataframe чтобы я мог поместить данные в Excel, как я делаю для adj price.

Большое спасибо!

Ответ №1:

Вы можете попробовать этот ответ, используя пакет под названием yahooquery. Отказ от ответственности: я являюсь автором пакета.

 from yahooquery import Ticker
import pandas as pd

symbols = ['^GSPC', 'NQ=F', 'AAU', 'ALB', 'AOS', 'APPS', 'AQB', 'ASPN', 'ATHM', 'AZRE', 'BCYC', 'BGNE', 'CAT', 'CC', 'CLAR', 'CLCT', 'CMBM', 'CMT', 'CRDF', 'CYD', 'DE', 'DKNG', 'EARN', 'EMN', 'FBIO', 'FBRX', 'FCX', 'FLXS', 'FMC', 'FMCI', 'GME', 'GRVY', 'HAIN', 'HBM', 'HIBB', 'IEX', 'IOR', 'KFS', 'MAXR', 'MPX', 'MRTX', 'NSTG', 'NVCR', 'NVO', 'OESX', 'PENN', 'PLL', 'PRTK', 'RDY', 'REGI', 'REKR', 'SBE', 'SQM', 'TCON', 'TCS', 'TGB', 'TPTX', 'TRIL', 'UEC', 'VCEL', 'VOXX', 'WIT', 'WKHS', 'XNCR']

# Create Ticker instance, passing symbols as first argument
# Optional asynchronous argument allows for asynchronous requests
tickers = Ticker(symbols, asynchronous=True)

data = tickers.get_modules("summaryProfile quoteType")
df = pd.DataFrame.from_dict(data).T

# flatten dicts within each column, creating new dataframes
dataframes = [pd.json_normalize([x for x in df[module] if isinstance(x, dict)]) for module in ['summaryProfile', 'quoteType']]

# concat dataframes from previous step
df = pd.concat(dataframes, axis=1)

# View columns
df.columns
Index(['address1', 'address2', 'city', 'state', 'zip', 'country', 'phone',
       'fax', 'website', 'industry', 'sector', 'longBusinessSummary',
       'fullTimeEmployees', 'companyOfficers', 'maxAge', 'exchange',
       'quoteType', 'symbol', 'underlyingSymbol', 'shortName', 'longName',
       'firstTradeDateEpochUtc', 'timeZoneFullName', 'timeZoneShortName',
       'uuid', 'messageBoardId', 'gmtOffSetMilliseconds', 'maxAge'],
      dtype='object')

# Data you're looking for
df[['symbol', 'shortName', 'sector']].head(10)
      symbol                      shortName                  sector
0  NQZ20.CME              Nasdaq 100 Dec 20                     NaN
1        ALB          Albemarle Corporation         Basic Materials
2        AOS         A.O. Smith Corporation             Industrials
3       ASPN           Aspen Aerogels, Inc.             Industrials
4        AAU         Almaden Minerals, Ltd.         Basic Materials
5      ^GSPC                        Samp;P 500                     NaN
6       ATHM                  Autohome Inc.  Communication Services
7        AQB  AquaBounty Technologies, Inc.      Consumer Defensive
8       APPS          Digital Turbine, Inc.              Technology
9       BCYC       Bicycle Therapeutics plc              Healthcare

  

Комментарии:

1. Большое спасибо, но я не смог загрузить yahooquery. Я использую Anaconda и устанавливаю окна терминала system32 cmd.exe…………. Ошибка: не удалось установить пакеты из-за ошибки среды: доступ запрещен:……… рассмотрите возможность использования опции user или проверьтеграницы. ……..Извините, что я идиот в программировании ..как сделать?

2. В настоящее время пакет недоступен через conda, вам придется установить его с помощью pip — pip install yahooquery

3. Очень хорошая производительность. Я только что попробовал с 10 акциями, и он вернулся довольно быстро. Я использовал модули get_modules("summaryProfile summaryDetail") , поэтому в результирующем наборе данных не было символа. Есть ли простой способ включить его, не запрашивая модуль quoteType?

Ответ №2:

Он обрабатывает запасы и сектора одновременно. Однако некоторые акции не имеют сектора, поэтому добавляется средство устранения ошибок. Поскольку имя столбца проблемы состоит из сектора и имени проблемы, мы меняем его на иерархический столбец и обновляем полученный фрейм данных. Наконец, я сохраняю его в формате CSV, чтобы импортировать его в Excel. Я пробовал только некоторые акции из-за большого количества акций, поэтому могут возникнуть некоторые проблемы.

 import datetime

import pandas as pd
import yfinance as yf
import pandas_datareader.data as web

yf.pdr_override()

start = "2018-01-01"
end = "2019-01-01"

# symbol = ['^GSPC', 'NQ=F', 'AAU', 'ALB', 'AOS', 'APPS', 'AQB', 'ASPN', 'ATHM', 'AZRE', 'BCYC', 'BGNE', 'CAT', 
#'CC', 'CLAR', 'CLCT', 'CMBM', 'CMT', 'CRDF', 'CYD', 'DE', 'DKNG', 'EARN', 'EMN', 'FBIO', 'FBRX', 'FCX', 'FLXS', 
#'FMC', 'FMCI', 'GME', 'GRVY', 'HAIN', 'HBM', 'HIBB', 'IEX', 'IOR', 'KFS', 'MAXR', 'MPX', 'MRTX', 'NSTG', 'NVCR',
#'NVO', 'OESX', 'PENN', 'PLL', 'PRTK', 'RDY', 'REGI', 'REKR', 'SBE', 'SQM', 'TCON', 'TCS', 'TGB', 'TPTX', 'TRIL', 
#'UEC', 'VCEL', 'VOXX', 'WIT', 'WKHS', 'XNCR']
stock = ['^GSPC', 'NQ=F', 'AAU', 'ALB', 'AOS', 'APPS']

adj_close = pd.DataFrame([])

for symbol in stock:
    try:
        sector = yf.Ticker(symbol).info['sector']
        name = yf.Ticker(symbol).info['shortName']
    except:
        sector = 'None'
        name = 'None'
    adj_close[sector, symbol] = web.get_data_yahoo(symbol, start=start, end=end)['Adj Close']
idx = pd.MultiIndex.from_tuples(adj_close.columns)
adj_close.columns = idx
adj_close.head()

                    None    Basic Materials Industrials Technology
            ^GSPC_None  NQ=F_None   AAU_None    ALB_Albemarle Corporation   AOS_A.O. Smith Corporation  APPS_Digital Turbine, Inc.
2018-01-02  2695.810059 6514.75 1.03    125.321663  58.657742   1.79
2018-01-03  2713.060059 6584.50 1.00    125.569397  59.010468   1.87
2018-01-04  2723.989990 6603.50 0.98    124.073502  59.286930   1.86
2018-01-05  2743.149902 6667.75 1.00    125.502716  60.049587   1.96
2018-01-08  2747.709961 6688.00 0.95    130.962250  60.335583   1.96


# for excel 
adj_close.to_csv('stock.csv', sep=',')
  

Комментарии:

1. Спасибо, это работает, но как насчет НАЗВАНИЯ для компаний.

2. Я добавил название компании таким же образом. Код был обновлен.

3. Большое спасибо! сортировка_adj_close.to_excel(writer, sheet_name=’adj close’) сортировка_high_price.to_excel(writer, sheet_name=’высокая цена’) сортировка_low_price.to_excel(writer, sheet_name=’низкая цена’) сортировка_volume.to_excel(writer, sheet_name=’объем’), я хочу разделить имя и сектор отadj закрыть цену в другой лист Excel, могу ли я это сделать?

4. Теперь я разделяю vol, adj price, high price и low price на разные листы Excel… Я хочу иметь еще один отдельный лист для такой информации, как имя, сектор, заработок и т. Д. Большое спасибо!

5. У меня нет опыта записи непосредственно в Excel, но мне интересно, возможно ли это с помощью техники, которую вы комментируете. Поскольку он развивался с первого выпуска, я думаю, что было бы быстрее и с большей вероятностью получить ответы от большего количества людей, если бы это был отдельный вопрос.