将pandas系列转换为可迭代的迭代

May*_*ain 4 python pandas scikit-learn

我想MultiLabelBinarizer在sklearn中使用.我有一个熊猫系列,我想把这个系列作为MultiLabelBinarizer适合函数的输入.但是,我发现MultiLabelBinarizer适合需要输入表单iterable of iterables.我不知道如何将熊猫系列转换为所需类型.

import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer

data = pd.read_csv("somecsvFile")
y = pd.DataFrame(data['class'])

mlb = MultiLabelBinarizer()
y = mlb.fit(???)
Run Code Online (Sandbox Code Playgroud)

我尝试将它转换为numpy数组,尝试使用pandas的iter功能,但似乎没有任何工作.

请给我一些建议.

谢谢

Edit1:输出print(data['class'].head(10))是:

0        func
1        func
2        func
3    non func
4        func
5        func
6    non func
7    non func
8    non func
9        func
Name: status_group, dtype: object
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 6

如何解决以下事实MultiLabelBinarizer's fit needs an input of form iterable of iterables:

In [8]: df
Out[8]:
      class
0      func
1      func
2      func
3  non func
4      func
5      func
6  non func
7  non func
8  non func
9      func

In [10]: import pandas as pd
    ...: from sklearn.preprocessing import MultiLabelBinarizer

In [11]: y = df['class'].str.split(expand=False)   # <--- NOTE !!!

In [12]: mlb = MultiLabelBinarizer()
    ...: y = mlb.fit_transform(y)
    ...:

In [13]: y
Out[13]:
array([[1, 0],
       [1, 0],
       [1, 0],
       [1, 1],
       [1, 0],
       [1, 0],
       [1, 1],
       [1, 1],
       [1, 1],
       [1, 0]])
Run Code Online (Sandbox Code Playgroud)

更新: 由@unutbu提议,您可以使用pd.get_dummies()

In [21]: pd.get_dummies(df['class'])
Out[21]:
   func  non func
0     1         0
1     1         0
2     1         0
3     0         1
4     1         0
5     1         0
6     0         1
7     0         1
8     0         1
9     1         0
Run Code Online (Sandbox Code Playgroud)

  • 这似乎将`non func`解释为2个标签:'non`和`func`.如果OP希望`non func`是一个与`func`不同的标签,那么也许`pd.get_dummies(df ['class']).值.就足够了. (2认同)