首页 > 解决方案 > 将包含熊猫系列的列转换为特征

问题描述

我的数据框如下:

            a
0     [8, 10]
1  [12, 7, 9]

如您所见,a 列包含一个列表。该列表中的数字在我们的领域中具有意义,我想将它们用作特征。我的预期输出如下:

   Tag_7  Tag_8  Tag_9  Tag_10  Tag_12
0      0      1      0       1       0
1      1      0      1       0       1

我使用了一些从互联网上找到的方法,它们满足了我的期望,但是这些方法存在执行时间问题。其中之一如下:

pd.get_dummies(df.a.apply(pd.Series).stack().astype(int), prefix='Tag').sum(level=0)

我认为这种方法对小型数据集很有用。就我而言,它没有用。我需要帮助。提前致谢。祝你今天过得愉快

标签: pythonpandasdataframeseries

解决方案


试试看scikit-learn是否有帮助

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
cols = np.unique(np.concatenate(df.a))
df_final = pd.DataFrame(mlb.fit_transform(df.a), columns=cols).add_prefix('T_')

Out[213]:
   T_7  T_8  T_9  T_10  T_12
0    0    1    0     1     0
1    1    0    1     0     1

如果您需要挤压 every ms,则 usechain.from_iterablenp.concatenate使用np.char.addto快于T_列名

from sklearn.preprocessing import MultiLabelBinarizer
from itertools import chain

mlb = MultiLabelBinarizer()
cols = np.char.add('T_', np.unique(list(chain.from_iterable(df.a))).astype(str))
df_final = pd.DataFrame(mlb.fit_transform(df.a), columns=cols)

推荐阅读