spo.optimize:只有整数,切片(:),省略号(...),numpy.newaxis(无)和整数或布尔数组才是有效索引

时间:2017-04-15 04:24:47

标签: python numpy scipy

df = pd.read_csv("loc.csv",index_col=['Date'],na_values=['NA'],
                     parse_dates=True)

dates = pd.date_range('2010-01-01','2010-12-31')

symbols = ['AAPL','GOOG']

df1= df.ix[dates,symbols]

df1=df1.dropna(how='all')

line = [.5,0]

def min1 (df1,l ):
    err= np.sum( (df1['GOOG']-(df1['AAPL']*l[0]+l[1]))**2 )
    return err

result = spo.minimize(min1,line,args =(df1),method =' SLSQP',options = {' disp':True})

我收到如下错误:

only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

错误意味着某个变量是一个浮点数组或数组(或列表)正用于索引角色;即它不应该在某个地方。

虽然我必须更仔细地研究你的代码,但引起我注意的第一件事是(df)。这应该是元组,需要逗号:

args= (df1,)

如果这个简单的修复工作不起作用,请提供更多错误堆栈,以便我们更好地了解问题发生的位置。

这会运行吗?

min1(line, df1)

该函数的第一个参数是'自由变量',minimize变化的变量,开始x0值(line)。 {* 1}}参数在不变的情况下提供附加参数。

鉴于初始值argsline = [.5,0]实际上已被调用(第一次使用

min1

但是在min1(np.array([.5,0]), df1) 里面你用字符串索引第一个参数,好像它是一个Pandas对象,而不是一个简单的2元素数组

min1

这可能是产生错误的原因。

因此,问题的根源是df1['GOOG'] # here df1 is the initial array, not the dataframe 的参数顺序混淆,并混合了数组和数据帧。