#python #pandas
#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:ProgramDataAnaconda3libsite-packagespandascoreframe.py", line 2688, in __getitem__
return self._getitem_column(key)
File "C:ProgramDataAnaconda3libsite-packagespandascoreframe.py", line 2695, in _getitem_column
return self._get_item_cache(key)
File "C:ProgramDataAnaconda3libsite-packagespandascoregeneric.py", line 2489, in _get_item_cache
values = self._data.get(item)
File "C:ProgramDataAnaconda3libsite-packagespandascoreinternals.py", line 4115, in get
loc = self.items.get_loc(item)
File "C:ProgramDataAnaconda3libsite-packagespandascoreindexesbase.py", line 3080, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas_libsindex.pyx", line 140, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libsindex.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas_libshashtable_class_helper.pxi", line 1492, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas_libshashtable_class_helper.pxi", line 1500, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'var1'
Ответ №1:
То, что вы делаете, выглядит правильно.
Ошибка, которую вы получаете, возникает, когда именованный столбец не существует во фрейме данных при запуске df['var1'
]. Это не связано с типом данных столбца.
Дважды проверьте, что имена столбцов, загруженных из CSV, точно соответствуют названиям в categorical_features
и не содержат начальных или конечных пробелов или других незначительных различий.
Показана третья строка обратной трассировки __getitem__
, которая является частной функцией Python, вызываемой при использовании квадратных скобок для объекта. Это выполняется перед get_dummies()
вызовом.
Комментарии:
1. Это произошло из-за заглавных букв. Пожалуйста, уточните, как новые дихотомизированные столбцы нумеруются / упорядочиваются. Например, var1 имеет 63 различных категории или уровня, и они корректно создают 63 разных столбца. Однако новые столбцы расположены в интересном порядке: var1_1, var1_10, var1_11, var1_13 — в нем пропущено 12. Кроме того, после того, как он достигает var1_99, он создает новые столбцы, такие как var1_A0, var1_A4, var1_A5 и var1_B4. Я не могу понять шаблон — есть ли он?
2. Вероятно, об этом стоит начать новый вопрос. Похоже, что он упорядочивает строки или буквенно-цифровые, а не только по числу, а что касается букв, я не знаю.