簡體   English   中英

讀取 CSV & Columns - KeyError: “[Int64Index([0, 1, 2, 3], dtype='int64')] 都在 [columns] 中”

[英]Reading CSV & Columns - KeyError: “None of [Int64Index([0, 1, 2, 3], dtype='int64')] are in the [columns]”

我在嘗試對簡單的 DF 生成共線性分析時遇到問題(見下文)。 我的問題是每次我嘗試運行 function 時,都會檢索到以下錯誤消息:

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) 

我試圖在其上運行 function 的 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 與 header 和列發生某種沖突,這會阻止 function 的 rest 遍歷它的每一列

-猜測2:問題來自空白分隔符,它阻止了function 正確地從一列跳到另一列。 問題是我的 CSV 文件已經有“;” 分隔符(我不知道為什么要誠實,因為我手動創建了文件並將其保存為帶有“,”分隔符的常規 CSV)。

目前不知道如何解決這個問題,這里有沒有人有見解?

最好的

該錯誤是由此代碼段X[variables].values的。 variablesrange )轉換為list

順便說一句,代碼非常混亂。 variables已經是一個range時,為什么要調用np.arange 為什么要使用一定范圍的列數來索引行?

從上面的評論看來,您認為您是按列號索引列,但實際上您是在索引行。 如果您使用loc`` or iloc``` 來明確說明您要索引的內容,則可以消除一些混亂。

明白了,我修改了整個事情,似乎正在工作。 請參閱下面的外觀。

非常感謝您的幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM