我正在尝试使用scikit-learn的LabelEncoder
对pandas中的字符串标签DataFrame
进行编码。由于数据帧有许多(50+)列,我想避免为每个列创建一个LabelEncoder
对象;我宁愿只有一个可以在所有数据列上工作的大型LabelEncoder
对象。
将整个DataFrame
放入LabelEncoder
会产生以下错误。请注意,这里我使用的是虚拟数据;实际上,我正在处理大约50个字符串标记数据列,因此需要一种不引用任何列名称的解决方案。
import pandas
from sklearn import preprocessing
df = pandas.DataFrame({
'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'],
'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'],
'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego',
'New_York']
})
le = preprocessing.LabelEncoder()
le.fit(df)
Traceback (most recent call last): File "", line 1, in File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/preprocessing/label.py", line 103, in fit y = column_or_1d(y, warn=True) File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.py", line 306, in column_or_1d raise ValueError("bad input shape {0}".format(shape)) ValueError: bad input shape (6, 3)
您有什么想法可以解决这个问题吗?
dataframe
进行编码,我正在选择编码对象,因此希望避免对50个独立对象进行pickle/unpickle操作。另外,我想知道是否有一种方法可以让编码器简化数据,例如只返回每列中变量的唯一组合的一个标识符所在的行。 - Bryanreplace
方法,在 pandas 中以简单的方式完成所有操作。请参见下面的答案。 - Ted Petrouscikit-learn 0.20
开始,不需要实现自定义类来对多列进行标签编码。您可以直接使用OrdinalEncoder。 - Ric S