【问题标题】:KeyError: 'not found in index' -created dummy variables not found in indexKeyError:“未在索引中找到”-创建的虚拟变量未在索引中找到
【发布时间】:2021-01-29 11:45:21
【问题描述】:

我正在研究逻辑回归问题。我根据另一列中的信息创建了 2 个新变量(如果值高于或低于阈值,则给出值 'gt40')。然后我必须为“糖尿病”、“bmi_cat”和“白蛋白猫”变量创建虚拟变量。一切正常,我可以打印一个头/导出一个符合我需要的 csv。

然后,当我尝试实际运行逻辑回归模型时,出现以下错误:

X = new_df[['Age','Sex','SMOKE', 'DIABETES_NO', 'DIABETES_INSULIN', 'DIABETES_NON-INSULIN', 'bmi_cat_gte40',
           'bmi_catlt40','bmi_cat0','albumin_catgt3.5', 'albumin_catlt3.5','ablumin_cat0']]

y = new_df['Mortality']
#Create train, test, split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)

#Logistic Regression Model
logreg = LogisticRegression()
logreg.fit(X_train, y_train)

然后我得到以下错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-22-88ad326a3d1e> in <module>
      1 #Create X and y
      2 X = new_df[['Age','Sex','SMOKE', 'DIABETES_NO', 'DIABETES_INSULIN', 'DIABETES_NON-INSULIN', 'bmi_cat_gte40',
----> 3            'bmi_catlt40','bmi_cat0','albumin_catgt3.5', 'albumin_catlt3.5','ablumin_cat0']]
      4 
      5 y = new_df['Mortality']

E:\Users\davidwool\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2680         if isinstance(key, (Series, np.ndarray, Index, list)):
   2681             # either boolean or fancy integer index
-> 2682             return self._getitem_array(key)
   2683         elif isinstance(key, DataFrame):
   2684             return self._getitem_frame(key)

E:\Users\davidwool\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_array(self, key)
   2724             return self._take(indexer, axis=0)
   2725         else:
-> 2726             indexer = self.loc._convert_to_indexer(key, axis=1)
   2727             return self._take(indexer, axis=1)
   2728 

E:\Users\davidwool\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
   1325                 if mask.any():
   1326                     raise KeyError('{mask} not in index'
-> 1327                                    .format(mask=objarr[mask]))
   1328 
   1329                 return com._values_from_object(indexer)

KeyError: "['bmi_catlt40' 'bmi_cat0' 'albumin_catgt3.5' 'albumin_catlt3.5'\n 'ablumin_cat0'] not in index"

csv 看起来不错并且包含所有值,但是当我尝试运行模型时,它找不到我从索引中的虚拟变量中创建的那些变量。

任何建议将不胜感激。谢谢!

#columns
new_df.columns
Index(['Age', 'Sex', 'DIABETES', 'bmi', 'SMOKE', 'DPRALBUM', 'Readmission',
       'Infection', 'bmi_cat', 'albumin_cat', 'Optimized', 'Mortality',
       'DIABETES_INSULIN', 'DIABETES_NO', 'DIABETES_NON-INSULIN', 'bmi_cat_0',
       'bmi_cat_gte40', 'bmi_cat_lt40', 'albumin_cat_0', 'albumin_cat_gt3.5',
       'albumin_cat_lt3.5'],
      dtype='object')

【问题讨论】:

  • 你能把输出添加到new_df.columns。这可能是其中一列名称的拼写错误
  • 是的,我现在将其添加到原始帖子中

标签: python pandas scikit-learn logistic-regression


【解决方案1】:

你写的:

['Age','Sex','SMOKE', 'DIABETES_NO', 'DIABETES_INSULIN', 'DIABETES_NON-INSULIN', 'bmi_cat_gte40',
    'bmi_catlt40',  'bmi_cat0',  'albumin_catgt3.5',  'albumin_catlt3.5',  'ablumin_cat0']

您要获取的列的实际名称:

['Age', 'Sex', 'SMOKE', 'DIABETES_NO', 'DIABETES_INSULIN', 'DIABETES_NON-INSULIN', 'bmi_cat_gte40',
    'bmi_cat_lt40', 'bmi_cat_0', 'albumin_cat_gt3.5', 'albumin_cat_lt3.5', 'albumin_cat_0']

尝试比较每个列表的第二行,您会发现一些差异。

【讨论】:

  • 做到了!哦,天哪……我花了好几个小时盯着这段代码试图找出问题所在……你为此付出了很多,很高兴这是一个简单的修复!
猜你喜欢
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2020-08-19
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多