【问题标题】:How to fix Python/Pandas too many indexers error?如何修复 Python/Pandas 索引器过多的错误?
【发布时间】:2020-03-26 00:50:00
【问题描述】:

我已尝试在 Python 3.7 中运行以下代码,以循环遍历数据框“Rawdata”中的每个数据列组合,以使用 statsmodel 库创建回归模型的子集并返回最佳模型。在我运行最后一行之前,代码不会抛出任何错误:best_subset(X, Y)。它返回:“IndexingError: Too many indexers”。

知道出了什么问题/如何解决吗?

如果有人可以提供帮助,那就太好了!谢谢

#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)

【问题讨论】:

    标签: python-3.x pandas python-3.7 statsmodels


    【解决方案1】:

    您的循环变量子集可以是长度为 n_features 的元组。例如,如果子集为 (0, 1),则您的回归将显示为

    lin_reg = sm.OLS(Y, X.iloc[:, (0, 1)]).fit()
    

    Pandas 不知道如何处理这个问题(请参阅here)。一种解决方案是将子集的类型从元组转换为列表:

    for subset in subsets:
        subset = list(subset)
        lin_reg = sm.OLS(Y, X.iloc[:, subset]).fit()
    

    【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2021-09-17
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多