Почему ошибка «Вышеуказанное исключение было прямой причиной следующего исключения:» возникла на Python

#python-3.x #csv #sklearn-pandas #keyerror

Вопрос:

Я пытаюсь обработать свой CSV с помощью nlargest, и я столкнулся с этой ошибкой. Есть какие-нибудь причины, почему это может быть? Я пытаюсь разобраться в этом, но, кажется, это просто не проходит.

 import pandas as pd
from matplotlib import pyplot
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from pandas import read_csv
from pandas.plotting import scatter_matrix


filename = '/Users/rahulparmeshwar/Documents/Algo Bots/Data/Live Data/Tester.csv'
data = pd.read_csv(filename)
columnname = 'Scores'
bestfeatures = SelectKBest(k='all')
y = data['Vol']
X = data.drop('Open',axis=1)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)
featurescores = pd.concat([dfscores,dfcolumns],axis=1)
print(featurescores.nlargest(5,[columnname]))
 

Это выдает мне ошибку Scores , приведенное выше исключение было прямой причиной следующего исключения в последней строке print(featurescores.nlargest(5,[columnname])) . Может ли кто-нибудь объяснить мне, почему это происходит? Я огляделся вокруг и, кажется, не могу этого понять.

ИЗМЕНИТЬ: Полный Стек Ошибок:

Exception has occurred: KeyError 'Scores'

Вышеуказанное исключение было прямой причиной следующего исключения:

File "C:UsersmattrOneDriveDocumentsPython AIAI.py", line 19, in <module> print(featurescores.nlargest(2,'Scores'))

Комментарии:

1. Не могли бы вы предоставить полный стек ошибок?

2. Я отредактировал полный стек ошибок. Пожалуйста, дайте мне знать.

3. Похоже, что набор данных для чтения не содержит столбца с именем «Оценки». Каковы колонки, каков результат print(featurescores.columns) ?

4. Я добавил имя столбца под названием оценки, и что вы подразумеваете под результатом » печать(featurescores.columns)»

5. Не могли бы вы распечатать названия столбцов featurescores ?

Ответ №1:

Исключение KeyError означает, что в объединенном featurescores фрейме данных нет столбца с именем «Оценки».

Проблема заключается в созданных кадрах dfscores данных, dfcolumns для которых явно не определены имена столбцов, поэтому их имена в одном столбце будут «по умолчанию» 0 . То есть после объединения вы получаете фрейм данных ( featurescores ), аналогичный этому:

            0         0
0         xxx     col1_name
1         xxx     col2_name
2         xxx     col3_name
...
 

Если вы хотите ссылаться на столбцы по имени, вы должны явно определить имена столбцов следующим образом:

 >>> dfscores = pd.DataFrame(fit.scores_, columns=["Scores"])
>>> dfcolumns = pd.DataFrame(X.columns, columns=["Features"])
>>> featurescores = pd.concat([dfscores,dfcolumns], axis=1)
>>> print(featurescores.nlargest(5, "Scores"))

       Scores   Features
0       xxx       col_name1
1       xxx       col_name2
2       xxx       col_name3
...
 

Если вы хотите использовать функции в качестве индекса, вот один лайнер:

 >>> featurescores = pd.DataFrame(data=fit.scores_.transpose(), index=X.columns.transpose(), columns=["Scores"])
>>> print(featurescores)

               Scores
col_name1       xxx
col_name2       xxx
col_name3       xxx
...
 

Комментарии:

1. Это исправило ошибку, большое вам спасибо! Однако теперь он возвращает пустой фрейм данных в виде сообщения.