将数字标志设置为数据帧

时间:2016-12-19 21:03:28

标签: python pandas

我是熊猫新手,想知道处理字符串数据的最佳方法是什么?我想用字母对字符串进行编号,但我确信有更好的方法可以做到这一点?字符串值将作为特征合并到KNN中。

假设以下数据并假设我编号为我的类型:

enter image description here

只是一个例子: 这显然会给我一个could not convert string to float

knn = KNeighborsClassifier(n_neighbors=15)
knn.fit(df['Type'], df['Quantity']) 

有没有办法做到这一点,而不是#34;键入"数字?

2 个答案:

答案 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

enter image description here

答案 1 :(得分:2)

您注意到的Scikit-learn不接受字符串值作为功能。您必须将每个字符串值转换为某个数字。你可以像你一样添加一个标志列,并且@piRSquared已经显示了一个pandas快捷方式(也在scikit-learn中使用LabelEncoder完成)但是这会使用特定的数字顺序对食物类型的值进行编码,这可能会也可能不会感。肉类的含量是水果的两倍,豆类的含量是肉类的50%。

我个人会使用pd.get_dummies(df['Type'])为每个水果价值制作一个新功能。