#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. Это исправило ошибку, большое вам спасибо! Однако теперь он возвращает пустой фрейм данных в виде сообщения.