scikit-learn - 在 Sklearn 中跨包含文本和数字的多个列应用 LabelEncoder
问题描述
我正在尝试将 Sklearn (0.24.1) Labelencoder 应用于其中一些列将文本和数字混合在一起的数据集。
dataset.csv
filename1, cat, dog, elephant, hamster, 1, 7, 8, 4, 10
filename2, hamster, dog, lizard, 7, 5, 3, 8, 19, 1
filename3, raccoon, 8, 10, 11, 14, 15, 16, 3, 23
filename4, turtle, cat, lizard, bird, fish, 6, 2, 4, 11
filename5, bird, donkey, 5, 2, 8, 2, 6, 7, 3
我正在尝试将所有动物名称转换为数值。下面是我尝试使用的代码。
input_file = "dataset.csv"
df = pd.read_csv(input_file, header = 0)
numDF = OneHotEncoder().fit_transform(df)
但是当我运行它时,我得到了错误:
TypeError: Encoders require their input to be uniformly strings or numbers. Got ['float', 'str']
解决方案
你可以看看这个关于ColumnTransformer
.
简而言之,你会使用类似的东西:
from sklearn.compose import ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[('categorical', OneHotEncoder(), ['filename', 'animal'])],
remainder='passthrough',
)
numerical_df = preprocessor.fit_transform(df)
但是,只有在数据框中有固定的标题为“文件名”和“动物”的列时,这才有效。似乎每行都有不同数量的带有动物的列,这需要一些自定义预处理,不太适合 scikit-learn。
推荐阅读
- php - 在 laravel 7 中进行管理员身份验证后注册
- python - TypeError:列表索引必须是整数或切片,而不是 str
- macos - Microsoft Office alt 键驱动的对称调整大小和裁剪丢失?
- javascript - Google Charts - 在javascript中将数据作为变量传递
- javascript - 带分隔选项的输入(php、js、html)
- c# - C# WPF ListView 更新变量更改
- java - Android Studio AsyncTask 结果函数
- python - Networkx graph_from_place:一对点之间没有路径,如何解决?
- c++ - SetupDiSetClassInstallParamsW Windows API 失败
- spring - 2个作业之间的Spring批处理分区器同步