【问题标题】:I get key error whenever I try to encode categorical_features in my dataframe每当我尝试在我的数据框中编码 categorical_features 时,我都会遇到关键错误
【发布时间】:2021-01-17 16:57:23
【问题描述】:

这些是我存储在列表中的分类特征名称

my_list=['MSZoning','Street','LotShape','LandContour','Utilities','LotConfig','LandSlope',
'Neighborhood','Condition1','Condition2','BldgType','HouseStyle','RoofStyle','RoofMatl',
'Exterior1st','Exterior2nd','MasVnrType','ExterQual','ExterCond','Foundation','BsmtFinType2',
'Heating','HeatingQC','CentralAir','KitchenQual','Functional','GarageType','GarageFinish',
'GarageQual','GarageCond','PavedDrive','SaleType','SaleCondition']

我的编码代码如下:

for cols in my_list:
    df[cols]=pd.get_dummies(df[cols],drop_first=True)

我收到以下错误:

KeyError: 'MSZoning'

During handling of the above exception, another exception occurred:

我对另一个数据集尝试了上述方法,但它工作得很好,但在这里它给了我上述错误。

【问题讨论】:

  • 请添加您遇到的整个错误。您省略了部分错误消息。

标签: categorical-data one-hot-encoding keyerror


【解决方案1】:

首先,欢迎来到 Stack Overflow

for cols in my_list:
    df[cols]=pd.get_dummies(df[cols], drop_first=True)

出错原因

由于 pd.get_dummies() 函数中的属性 drop_first=True,您会收到 KeyError。

说明

因此,在创建任何虚拟列之前,pd.get_dummies() 函数会检查该列是否存在于数据框中。

例如,您想在数据框 df 中创建虚拟列 MSZoning。所以函数 (get_dummies) 首先检查 MSZoning 列是否存在于您的 df 中。如果它存在于 df 中,它将删除该列并创建一个名为 MSZoning 的新列,因为您已编写 drop_first=True 这意味着删除或删除现在要创建其虚拟对象的同名的第一列。

解决方案

删除该行 drop_first = True 并像下面这样写

    for cols in my_list:
        df[cols]=pd.get_dummies(df[cols])

【讨论】:

  • 您好,感谢您的帮助,但是这种技术 drop_first 在将其用于贷款预测分类特征时有效,所以为什么我们不能 drop_first "MS_ZOning" 而我们只想要它的假人而不是分类列本身,您能详细说明一下吗?使用 drop_first 和不使用的区别??
  • 好吧,我建议您检查您的列的拼写是否正确? .其次,我已经在回答中解释了 drop_first 删除了第一次出现的同名列,例如如果您的数据框有“a”、“b”和“c”列。并假设您想再次对“a”进行虚拟化。因此 drop_first 将删除数据框中先前存在的“a”列,并创建一个具有相同名称“a”的新虚拟列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多