在Python中将分类变量二等分

时间:2019-04-23 20:27:13

标签: python pandas

我基本上是将数据帧读入Python,然后进行一些非常基础的数据探索:

data = pd.read_csv("S:/<File1.csv>"
data.dtypes

除第一列和最后一列外,所有列均作为对象类型读取。 var1-var7都是类别变量,在数据集的中间具有多个级别:

categorical_features = ['var1','var2','var3',var4','var5','var6','var7'] 
for col in categorical_features: #for each categorical col
    dummies = pd.get_dummies(data[col], prefix=col) #one-hot-encoding
    data = pd.concat([data, dummies], axis=1) #append to data
    data.drop(col, axis=1, inplace=True) #drop orig column

但是我收到错误消息。我知道当我列出的所有分类功能都为int64时,代码可以工作,但是我无法做到这一点,因为我的七个变量中有很多字符。

以下是我收到的错误列表:

  File "<ipython-input-20-388dc6340151>", line 2, in <module>
    dummies = pd.get_dummies(data[col], prefix=col) #one-hot-encoding
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2688, in __getitem__
    return self._getitem_column(key)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py", line 2695, in _getitem_column
    return self._get_item_cache(key)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 2489, in _get_item_cache
    values = self._data.get(item)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\internals.py", line 4115, in get
    loc = self.items.get_loc(item)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 3080, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas\_libs\index.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
  KeyError: 'var1'

1 个答案:

答案 0 :(得分:0)

您正在做的事情看起来正确。

运行df['var1']时,当DataFrame中的命名列不存在时,会发生您收到的错误。与列的数据类型无关。

再次检查从CSV加载的列名称与categorical_features中的列名称完全匹配,并且不包含前导或尾随空格或其他细微差别。

Traceback的第三行显示__getitem__,这是在对象上使用方括号时调用的私有python函数。这会在调用get_dummies()之前运行。