python - 将包含熊猫系列的列转换为特征
问题描述
我的数据框如下:
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)
我认为这种方法对小型数据集很有用。就我而言,它没有用。我需要帮助。提前致谢。祝你今天过得愉快
解决方案
试试看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_iterable
比np.concatenate
使用np.char.add
to快于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)
推荐阅读
- httpurlconnection - 关于 HttpURLConnection 和 HTTP2 的查询
- python - 在线校验和计算器如何工作?
- powershell - 通过 Teamcity 命令行选项运行时命令失败
- javascript - 如何在圆圈中添加文字并随机播放我的问题?
- flutter - Flutter 应用程序包构建错误:“找不到参数的方法 keyAlias()”
- python - InvalidArgumentError 训练多元 LSTM 自动编码器
- typescript - 为什么
? 为什么不使用 直接地? - python - 在 RobotFramework 中执行 tcpdump 命令时出错
- pdf - QPDF如何检测页面大小(或比例)
- javascript - 列表中的每个子元素都应该有一个唯一的子 DOM 元素的“键”道具