Python Итератор по фрейму данных или списку со складскими данными - PullRequest
0 голосов
/ 11 июля 2020

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

Немного предыстории: я пытаюсь взять список или фрейм данных биржевых тикеров и перейти в модуль тикера yfinance для извлечения истории для большого списка акций. Звучит просто - и, вероятно, для тех, кто какое-то время жил с Python.

Мой сценарий:

import yfinance as yf
import pandas as pd
from get_all_tickers import get_tickers as gt
list_of_tickers = gt.get_tickers()
tickerlist = pd.DataFrame(list_of_tickers, columns = ["Ticker"])
tickerlist = tickerlist.values.tolist()
tc = ""
for x in tickerlist:
    tc += str(x)

tc = tc.replace(" ", "")
tc = tc.replace("[", ",")
tc = tc.replace("]", "")
tc = tc.replace("'", "")
#tc = ",".join(tc)   

def Convert(string): 
    li = list(string.split(",")) 
    return li 

tc = Convert(tc)
df = pd.DataFrame(data=tc, columns = ["Ticker"])
df_filtered = df.iloc[1: , : ]
#df_filtered.update('"' + df_filtered[['Ticker']].astype(str) + '"')
# df_filtered.to_csv("./StockTickers.csv", sep=',',index=False)
list_filtered = df_filtered.values.tolist()

# valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
period= "1d"
# valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
interval = "1d"

#=============================================================================
for ticker in df_filtered: #df_filtered.iterrows():
    ticker = str(ticker).upper()
    ticker = yf.Ticker("DDD")
    history = ticker.history(
                            period = period,
                            interval = interval
                            )
    

    print(history)
    print(df_filtered)

1 Ответ

0 голосов
/ 11 июля 2020

Я собирался заняться личным проектом по отслеживанию моих инвестиций.

  1. Вы делаете много подготовительной работы, в которой нет необходимости. Тикеры подходят для ввода в yf.Ticker(). Создайте фрейм данных, который представляет собой список тикеров, затем отфильтруйте его до желаемого набора. (Я взял первые 5 тикеров)
  2. цикл выполняется в понимании списка до pd.concat()
  3. move Ticker столбец в качестве первого столбца (это я использовал немного сахара в коде)
  4. есть фрейм данных, который является историческими данными для всех желаемых тикеров
import yfinance as yf
from get_all_tickers import get_tickers as gt
df = pd.DataFrame(gt.get_tickers(), columns=["Ticker"])
df_f = df.iloc[:5, :]
df_r = pd.concat([yf.Ticker(t).history(period="1d", interval="1d")\
                  .reset_index()\
                  .assign(Ticker=t) for t in df_f["Ticker"].values])
df_r = df_r.reindex(columns=df_r.columns.insert(0,df_r.columns[-1:][0])[:-1])
df_r

вывод

    Ticker  Date    Open    High    Low Close   Volume  Dividends   Stock Splits
0   DDD 2020-07-10  6.48    6.64    6.39    6.63    1369600 0   0
1   DDD 2020-07-10  6.48    6.64    6.39    6.63    1336656 0   0
0   MMM 2020-07-10  151.69  153.25  150.99  152.85  1954500 0   0
1   MMM 2020-07-10  151.69  153.25  150.99  152.85  1934202 0   0
0   WBAI    2020-07-10  3.71    4.06    3.71    3.80    30000   0   0
1   WBAI    2020-07-10  3.71    4.06    3.71    3.80    29887   0   0
0   WUBA    2020-07-10  54.12   54.84   54.04   54.81   1690400 0   0
1   WUBA    2020-07-10  54.12   54.84   54.04   54.81   1686841 0   0
0   EGHT    2020-07-10  16.43   16.43   16.00   16.10   1610200 0   0
1   EGHT    2020-07-10  16.43   16.43   15.96   15.96   1610215 0   0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...