读取CSV&Columns KeyError:[Int64Index([0,1,2,3],dtype='int64')]中没有一个在[Columns]中

2024-09-21 03:24:52 发布

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

我在尝试生成一个简单DF的共线性分析时遇到了问题(见下文)。我的问题是,每次尝试运行该函数时,都会检索到以下错误消息:

KeyError: "None of [Int64Index([0, 1, 2, 3], dtype='int64')] are in the [columns]"

下面是我正在使用的代码

read_training_set = pd.read_csv('C:\\Users\\rapha\\Desktop\\New test\\Classeur1.csv', sep=";")
training_set = pd.DataFrame(read_training_set)

print(training_set)

def calculate_vif_(X):
    thresh = 5.0
    variables = range(X.shape[1])

    for i in np.arange(0, len(variables)):
        vif = [variance_inflation_factor(X[variables].values, ix) for ix in range(X[variables].shape[1])]
        print(vif)

        maxloc = vif.index(max(vif))
        if max(vif) > thresh:
            print('dropping \'' + X[variables].columns[maxloc] + '\' at index: ' + str(maxloc))
            del variables[maxloc]

    print('Remaining variables:')
    print(X.columns[variables])
    return X

X = training_set
X2 = calculate_vif_(X) 

我试图在其上运行函数的DF如下所示

   Year  Age  Weight  Size
0  2020   10     100   170
1  2021   11     101   171
2  2022   12     102   172
3  2023   13     103   173
4  2024   14     104   174
5  2025   15     105   175
6  2026   16     106   176
7  2027   17     107   177
8  2028   18     108   178

我有两个猜测;但不知道如何解决这个问题:

-猜测1:np.arrange与标题&;阻止函数的其余部分遍历每列的列

-猜测2:问题来自空格分隔符,它阻止函数正确地从一列跳到另一列。问题是,我的CSV文件已经有“;”分隔符(我不知道确切的原因,因为我手动创建了该文件并将其保存为带有“;”分隔符的常规CSV)

现在还不知道如何解决这个问题,这里有人有见解吗

最好的


Tags: columnscsv函数indfreadtrainingvariables
2条回答

明白了,我修改了整件事,看起来很有效。请参见下面的外观

非常感谢你的帮助

    variables = list(range(X.shape[1]))

    for i in variables:
        vif = [variance_inflation_factor(X.iloc[:, variables].values, ix)
               for ix in range(X.iloc[:, variables].shape[1])]

        maxloc = vif.index(max(vif))
        if max(vif) > thresh:
            print('dropping \'' + X.iloc[:, variables].columns[maxloc] +
                  '\' at index: ' + str(maxloc))
            del variables[maxloc]

    print('Remaining variables:')
    print(X.columns[variables])
    return X.iloc[:, variables]


X = training_set
X2 = calculate_vif_(X)```

此错误是由此代码段X[variables].values引起的。将variables转换为list,它是一个range

顺便说一句,代码非常混乱。当variables已经是range时,为什么要调用np.arange?为什么要使用一定数量的列来索引行

从上面的注释可以看出,您认为是按列编号索引列,但实际上是索引行。如果您使用loc`` oriloc```来明确说明您试图索引的内容,那么其中一些混淆将被消除

相关问题 更多 >

    热门问题