如何修复 Python/Pandas too many indexers 错误?
How to fix Python/Pandas too many indexers error?
我已经尝试 运行 下面 Python 3.7 中的代码循环遍历数据框中数据列的每个组合 'Rawdata' 使用 statsmodel 库创建回归模型的子集returns 最好的一个。在我 运行 最后一行之前,代码不会抛出任何错误:best_subset(X, Y)。它 returns : "IndexingError: Too many indexers".
知道 wrong/how 要修复什么吗?
如果有人能提供帮助就太好了!谢谢
#Data
Rawdata = pd.read_csv(r'C:\Users\Lucas\Documents\sample.csv')
#Main code
def best_subset(X, Y):
n_features = X.shape[1]
subsets = chain.from_iterable(combinations(range(n_features), k+1) for k in range(n_features))
best_score = -np.inf
best_subset = None
for subset in subsets:
lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()
score = lin_reg.rsquared_adj
if score > best_score:
best_score, best_subset = score, subset
return best_subset, best_score
#Define data inputs and call code above
X = Rawdata.iloc[:, 1:10]
Y = Rawdata.iloc[:, 0]
#To return best model
best_subset(X, Y)
您的循环变量子集可以是长度为 n_features 的元组。例如,如果子集是 (0, 1),则回归显示为
lin_reg = sm.OLS(Y, X.iloc[:, (0, 1)]).fit()
Pandas 不知道如何处理(参见 )。一种解决方案是将子集的类型从元组转换为列表:
for subset in subsets:
subset = list(subset)
lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()
我已经尝试 运行 下面 Python 3.7 中的代码循环遍历数据框中数据列的每个组合 'Rawdata' 使用 statsmodel 库创建回归模型的子集returns 最好的一个。在我 运行 最后一行之前,代码不会抛出任何错误:best_subset(X, Y)。它 returns : "IndexingError: Too many indexers".
知道 wrong/how 要修复什么吗?
如果有人能提供帮助就太好了!谢谢
#Data
Rawdata = pd.read_csv(r'C:\Users\Lucas\Documents\sample.csv')
#Main code
def best_subset(X, Y):
n_features = X.shape[1]
subsets = chain.from_iterable(combinations(range(n_features), k+1) for k in range(n_features))
best_score = -np.inf
best_subset = None
for subset in subsets:
lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()
score = lin_reg.rsquared_adj
if score > best_score:
best_score, best_subset = score, subset
return best_subset, best_score
#Define data inputs and call code above
X = Rawdata.iloc[:, 1:10]
Y = Rawdata.iloc[:, 0]
#To return best model
best_subset(X, Y)
您的循环变量子集可以是长度为 n_features 的元组。例如,如果子集是 (0, 1),则回归显示为
lin_reg = sm.OLS(Y, X.iloc[:, (0, 1)]).fit()
Pandas 不知道如何处理(参见
for subset in subsets:
subset = list(subset)
lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()