Python 索引器错误:在scipy函数中使用pandas.ix索引越界错误

Python 索引器错误:在scipy函数中使用pandas.ix索引越界错误,python,pandas,scipy,Python,Pandas,Scipy,在下面的代码部分,我继续得到一个索引越界错误,我一辈子都不知道为什么(这个网站上的链接还没有帮到我)。我想做的是将我的scipy曲线拟合函数(Func)应用于x_数据和y_数据中的每一行数据,以获得a、b、c和d拟合参数。有人能看出我做错了什么吗?谢谢 import pandas as pd from scipy.optimize import curve_fit import numpy as np import math #my function def Func(x_data,a,b,c

在下面的代码部分,我继续得到一个索引越界错误,我一辈子都不知道为什么(这个网站上的链接还没有帮到我)。我想做的是将我的scipy曲线拟合函数(Func)应用于x_数据和y_数据中的每一行数据,以获得a、b、c和d拟合参数。有人能看出我做错了什么吗?谢谢

import pandas as pd
from scipy.optimize import curve_fit
import numpy as np
import math

#my function
def Func(x_data,a,b,c,d):
    return np.multiply((np.multiply((a+cols), b)),
           (x_data.ix[i]/math.pi))+np.multiply((c+cols), d)

#create dummy dataframe
index=pd.date_range('2017-01-01','2017-03-01', freq='D')
columns=['1.234','2.345','3.456','4.567','5.678','6.789']

data1 = np.random.rand(60,6)
data2 = np.random.rand(60,6)

x_data=pd.DataFrame(data1, index=index, columns=columns)
y_data=pd.DataFrame(data2, index=index, columns=columns)

#values for function
cols=np.array(x_data.columns.values).astype(np.float)   

#Apply function to each row of x_data and y_data and append to empty array
data_popt=[]
data_perr=[]
for i, j in zip(range(0, len(x_data)), range(0, len(y_data))):
    popt, pcov = curve_fit(Func,x_data.ix[i],y_data.ix[j])
    data_popt.append(popt)
    perr=np.sqrt(np.diag(pcov))
    data_perr.append(perr)
    index=x_data.index
    columns1=['a','b','c','d']
    columns2=['a_err','b_err','c_err','d_err']
data_popt=pd.DataFrame(data_popt, index=index, columns=columns1)
data_perr=pd.DataFrame(data_perr, index=index, columns=columns2)

另外,我使用的是Pythonv2.7.12和pandas/scipyv0.18.1

错误是在中的第七次迭代(
I=6
)时产生的

在对
Func

#my function
def Func(x_data,a,b,c,d):
    return np.multiply((np.multiply((a+cols), b)),
           (x_data.ix[i]/math.pi))+np.multiply((c+cols), d)
问题是
x_数据。ix[i]
因为传递给
Func
x_数据是
6x1
i=6

我猜您忘记了您已经将一行传递给
Func
,因此不应该进一步分割它,即定义

#my function
def Func(x_data,a,b,c,d):
    return np.multiply((np.multiply((a+cols), b)),
           (x_data/math.pi))+np.multiply((c+cols), d)

同样尝试运行此操作时,迟早会得到
RuntimeError:Optimal parameters not found:函数调用数已达到maxfev=1000。
因此需要增加
maxfev
,即

popt, pcov = curve_fit(Func,x_data.ix[i],y_data.ix[j], maxfev=10000)

哪一行产生错误?无论您使用什么来运行python脚本,都应该告诉您错误的确切位置。我删除了之前的评论,因为这不是问题所在。我注意到的一件事是,您将循环中的
索引
重新设置为
x_数据。索引
,这是多余的,并且可能会在重新设置
索引
时抛开最后两行代码。非常感谢您提供了如此有用和及时的解决方案@matusko
popt, pcov = curve_fit(Func,x_data.ix[i],y_data.ix[j], maxfev=10000)