spo.优化:仅整数、切片(:)、省略号(…),新轴(无)和整数或布尔数组是有效的索引

2024-04-19 15:45:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

结果=spo.最小化(min1,line,args=(df1),方法='SLSQP',options={'disp':True})

我收到如下错误:

^{pr2}$

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


Tags: csvtruedfreadindexlinelocpd
1条回答
网友
1楼 · 发布于 2024-04-19 15:45:40

这个错误意味着某个变量(float或array(或list))正在索引角色中使用;也就是说,它不应该在某个地方使用。在

虽然我必须更仔细地研究您的代码,但首先吸引我注意的是(df)。这应该是元组,并且需要一个逗号:

args= (df1,)

如果这个简单的修复不起作用,请给出更多的错误堆栈,这样我们就可以更好地了解问题发生在哪里了。在


这个跑吗?在

^{pr2}$

函数的第一个参数是“free variable”,即minimize正在变化的变量,它从x0值(line)开始。当不变时,args参数提供了附加的参数。在


给定初始值line = [.5,0]min1实际上被调用(第一次

min1(np.array([.5,0]), df1)

但是在min1中,您用一个字符串索引第一个参数,就好像它是一个Pandas对象,而不是一个简单的2元素数组

df1['GOOG']  # here df1 is the initial array, not the dataframe

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

因此,问题的根源是混淆了min1的参数顺序,混淆了数组和数据帧。在

相关问题 更多 >