为什么我的 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
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