我正在尝试在 sklearn 中使用 MultiLabelBinarizer
。我有一个 pandas 系列,我想将该系列作为 MultiLabelBinarizer
的拟合函数的输入。但是,我看到 MultiLabelBinarizer 的拟合需要形式为 iterable of iterables
的输入。我不确定如何将 pandas 系列转换为所需的类型。
import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
data = pd.read_csv("somecsvFile")
y = pd.DataFrame(data['class'])
mlb = MultiLabelBinarizer()
y = mlb.fit(???)
我尝试将它转换为 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
最佳答案
如何解决 MultiLabelBinarizer 的拟合需要可迭代的可迭代形式的输入
:
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]])
更新: as proposed by @unutbu you can use 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
关于python - 将 Pandas 系列转换为可迭代对象的可迭代对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289631/