0

我正在做一个个人项目——更多的是一个学习冒险,这个项目包括一些在 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)
4

1 回答 1

0

我一直打算做一个个人项目来跟踪我的投资。

  1. 你做了很多不必要的准备。代码可以作为yf.Ticker(). 构建作为代码列表的数据框,然后将其过滤到想要的集合。(我已经拿了前 5 个股票)
  2. 循环是在列表理解中完成的pd.concat()
  3. 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

于 2020-07-11T05:53:38.180 回答