繁体   English   中英

无法通过名称从numpy数组获取值

[英]cannot get values from numpy array by name

我有以下代码,在其中尝试通过设置的名称获取数组中的值。

import datetime
import numpy as np
import matplotlib.finance as finance
import matplotlib.mlab as mlab

def get_pxing(my_tickers):
    dt = np.dtype([('sym', np.str_, 6), ('adj_close', np.float32)])
    close_px = []
    for ticker in my_tickers:
    # a numpy record array with fields: date, open, high, low, close, volume, adj_close)
        fh = finance.fetch_historical_yahoo(ticker, startdate, enddate)
        r = mlab.csv2rec(fh)    
        fh.close()
        prices = np.array((ticker, r.adj_close), dtype=dt)
        close_px.append(prices)
    return close_px

enddate = startdate = datetime.date.today() - datetime.timedelta(1)

my_tickers = np.genfromtxt('./stocklist.csv', delimiter = ",", dtype=None, names=True)

data = get_pxing(my_tickers["ticker"])
print data

这工作正常,但如果我尝试

print data['sym'] 

我得到:

Traceback (most recent call last):
  File "stockyield.py", line 26, in <module>
    print data['sym']
TypeError: list indices must be integers, not str

也许我已经使用close_px.append不正确地转换了我的数组,但是由于总是出现数组不匹配的情况,所以我无法弄清楚如何使用np.append。

我输入的csv文件如下所示:

ticker, holding
T, 100
F, 200

关于最佳方法有什么建议吗?

就像评论说的那样,您似乎在将numpy数组追加到数组列表中。 您确实想要创建一个元组列表,然后将元组列表转换为数组。

尝试这样的事情(更改的行有注释)

def get_pxing(my_tickers):
    dt = np.dtype([('sym', np.str_, 6), ('adj_close', np.float32)])
    close_px = []
    for ticker in my_tickers:
    # a numpy record array with fields: date, open, high, low, close, volume, adj_close)
        fh = finance.fetch_historical_yahoo(ticker, startdate, enddate)
        r = mlab.csv2rec(fh)    
        fh.close()
        prices = (ticker, r.adj_close)   # append a tuple to your list instead of an array
        close_px.append(prices)
    return np.array(close_px, dtype=dt)  # make the list of tuples into an array with dtype dt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM