다음 코드 단원에서는 인덱스 범위를 벗어나는 오류가 계속 발생하며 필자는 그 이유를 알 수 없습니다 (none 이 사이트의 링크 중 아직 나를 도왔습니다.) 내가 원하는 것은 x_data와 y_data의 각 데이터 행에 scipy curve_fit 함수 (Func)를 적용하여 a, b, c 및 d 적합 매개 변수를 얻는 것입니다. 누구든지 내가 뭘 잘못하고 있는지 알 수 있니? 감사!IndexError : scipy 함수에서 pandas .ix를 사용하여 범위를 벗어난 인덱스
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)
p.s. I 파이썬 V 2.7.12 및 팬더/scipy의 V를 사용하고 0.18.1 오류는 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)
의 평가
popt, pcov = curve_fit(Func,x_data.ix[i],y_data.ix[j])
에서 일곱 번째 반복 (i=6
)에 생성된다
을 증가해야합니까? – matusko
파이썬 스크립트를 실행하기 위해 사용하는 것은 무엇이든지 오류의 정확한 위치를 알려주고 있어야합니다. 그게 문제가 아니기 때문에 나는 이전의 코멘트를 지웠다. 한 가지 주목할 점은 루프 내에서'index'를 중복 설정 한'x_data.index'로 다시 설정했기 때문에'index'를 다시 설정하는 코드의 마지막 두 줄을 버리고있는 것입니다. – pshep123