我是熊猫新手,想知道处理字符串数据的最佳方法是什么?我想用字母对字符串进行编号,但我确信有更好的方法可以做到这一点?字符串值将作为特征合并到KNN中。
假设以下数据并假设我编号为我的类型:
只是一个例子:
这显然会给我一个could not convert string to float
knn = KNeighborsClassifier(n_neighbors=15)
knn.fit(df['Type'], df['Quantity'])
有没有办法做到这一点,而不是#34;键入"数字?
答案 0 :(得分:2)
使用pandas函数factorize
df.Type.factorize()
演示
df = pd.DataFrame([
[10000, 'Fruit'],
[500, 'Fruit'],
[100, 'Meat'],
[400, 'Fruit'],
[900, 'Meat'],
[5830, 'Meat'],
[2904, 'Bean']
], columns=['Quantity', 'Type'])
df['Flag'] = df.Type.factorize()[0]
df
答案 1 :(得分:2)
您注意到的Scikit-learn不接受字符串值作为功能。您必须将每个字符串值转换为某个数字。你可以像你一样添加一个标志列,并且@piRSquared已经显示了一个pandas快捷方式(也在scikit-learn中使用LabelEncoder完成)但是这会使用特定的数字顺序对食物类型的值进行编码,这可能会也可能不会感。肉类的含量是水果的两倍,豆类的含量是肉类的50%。
我个人会使用pd.get_dummies(df['Type'])
为每个水果价值制作一个新功能。