为什么我的 for 循环没有迭代完整的 pandas 列表

Why is my for loop not iterating over the complete pandas list

stockticker_data 是 Pandas 数据框,其中包含代码列表,但 for 循环不会遍历完整列表。由于某种原因,它在第一个列表符号之后立即停止。我需要做什么才能移动到下一个交易品种?

stockticker_data = pd.read_csv("Nifty 50 Scraped data.csv")

all_data = {}

for ticker in stockticker_data:
    all_data = web.get_data_yahoo(ticker, '1/1/2018', '1/1/2019') 

print(all_data)

输出如下所示:

             High         Low  ...      Volume   Adj Close
Date                                ...                        
2018-01-02  172.300003  169.259995  ...  25555900.0  167.701889
2018-01-03  174.550003  171.960007  ...  29517900.0  167.672668
2018-01-04  173.470001  172.080002  ...  22434600.0  168.451508

我已将代码修改为

for index, ticker in stockticker_data.iteritems():

    all_data.append(web.get_data_yahoo(ticker, '1/1/2018', '1/1/2019'))

print(all_data)

输出确实发生了变化,但仍然只提取了 1 个符号的数据: 我在这里遗漏了什么吗?

[Attributes   Adj Close                ...      Volume           
Symbols    AXISBANK.NS BAJAJ-AUTO.NS  ...  YESBANK.NS    ZEEL.NS
Date                                  ...                       
2018-01-01  564.798584   3152.436035  ...   4019878.0  1102118.0
2018-01-02  558.806030   3157.707031  ...   5224976.0   769766.0
2018-01-03  559.754822   3106.240723  ...   5672263.0  1207540.0
2018-01-04  559.205566   3128.667480  ...   5667580.0  1456032.0
2018-01-05  562.551331   3143.427002  ...  30720675.0  1568108.0
...                ...           ...  ...         ...        ...
2018-12-27  616.783997   2677.074463  ...  44303877.0  5809491.0
2018-12-28  624.274719   2658.001221  ...  27142501.0  6000271.0
2018-12-31  619.131104   2660.593262  ...  18970865.0  2663133.0
2019-01-01  626.521912   2666.950928  ...  24160878.0  2203533.0
2019-01-02  619.280884   2633.059570  ...  32583205.0  2687773.0

[248 rows x 288 columns]]

Process finished with exit code 0

您实际上并没有添加到 all_data 字典中,您只是覆盖了变量,因此它始终是 for 循环中的最后一个对象。尝试附加到列表。

stockticker_data = pd.read_csv("Nifty 50 Scraped data.csv")

all_data = []

for ticker in stockticker_data:
    all_data.append(web.get_data_yahoo(ticker, '1/1/2018', '1/1/2019'))

print(all_data)

您的打印语句在循环之外,因此它会为每个行情计算 all_data,然后仅在最后一个循环中打印 all_data。

此外,遍历数据帧效率低下。最好做类似的事情:

get_data = lambda ticker: web.get_data_yahoo(ticker, '1/1/2018', '1/1/2019')
stockticker_data['tickers'].apply(get_data)

其中 'tickers' 是包含股票代码的 stockticker_data 列的名称。

由于您声明需要遍历数据框项目,因此您可以使用数据框 object 的 iteritems 方法来获取行索引列表和序列 object,其中列 header可以用作属性来获取您的价值。

例如,假设我在“Nifty 50 Scraped data.csv”

中有以下数据
Ticker
CSCO
DFS
SOMETHING

然后您可以通过以下代码获取您的物品,

for rowIndex,  col in stockticker_data.iterrows():
    print rowIndex, col.Ticker