我基本上是将数据帧读入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'
答案 0 :(得分:0)
您正在做的事情看起来正确。
运行df['var1'
]时,当DataFrame中的命名列不存在时,会发生您收到的错误。与列的数据类型无关。
再次检查从CSV加载的列名称与categorical_features
中的列名称完全匹配,并且不包含前导或尾随空格或其他细微差别。
Traceback的第三行显示__getitem__
,这是在对象上使用方括号时调用的私有python函数。这会在调用get_dummies()
之前运行。