月关宝盒
感谢 Yong Wang 提出了get_dummiespandas 中的功能。我们可以显着缩短代码:df = pd.DataFrame({ 'movie_id': range(5), 'gernes': [ 'Action|Adventure|Fantasy|Sci-Fi', 'Action|Adventure|Fantasy', 'Action|Adventure|Thriller', 'Action|Thriller', 'Action|Adventure|Sci-Fi' ]}) dummies = df['gernes'].str.get_dummies(sep='|')final = pd.concat([df, dummies], axis=1)结果: movie_id gernes Action Adventure Fantasy Sci-Fi Thriller0 0 Action|Adventure|Fantasy|Sci-Fi 1 1 1 1 01 1 Action|Adventure|Fantasy 1 1 1 0 02 2 Action|Adventure|Thriller 1 1 0 0 13 3 Action|Thriller 1 0 0 0 14 4 Action|Adventure|Sci-Fi 1 1 0 1 0原始答案一种结合了 pandas 和机器学习数据准备技术的解决方案。假设您使用的是 pandas v0.25 或更高版本。首先,让我们从您的屏幕截图中创建一个数据框:df = pd.DataFrame({ 'movie_id': range(5), 'gernes': [ 'Action|Adventure|Fantasy|Sci-Fi', 'Action|Adventure|Fantasy', 'Action|Adventure|Thriller', 'Action|Thriller', 'Action|Adventure|Sci-Fi' ]}) movie_id gernes0 0 Action|Adventure|Fantasy|Sci-Fi1 1 Action|Adventure|Fantasy2 2 Action|Adventure|Thriller3 3 Action|Thriller4 4 Action|Adventure|Sci-Fi一部电影可以属于多个gernes。我们想要的是通过一个称为one-hot encoding的过程来分离这些 gernes 。我们定义类别(动作、冒险、惊悚片等)并将每部电影标记为是否属于每个类别:from sklearn.preprocessing import OneHotEncoders = df['gernes'].str.split('|').explode()encoder = OneHotEncoder()encoded = encoder.fit_transform(s.values[:, None])one_hot_df = pd.DataFrame(encoded.toarray(), columns=np.ravel(encoder.categories_), dtype='int') \ .groupby(s.index) \ .sum() Action Adventure Fantasy Sci-Fi Thriller0 1 1 1 1 01 1 1 1 0 02 1 1 0 0 13 1 0 0 0 14 1 1 0 1 0这意味着第一部电影属于动作、冒险、奇幻和科幻而不是惊悚类别,第二部电影属于动作、冒险和奇幻等。最后一站是将它们组合在一起:final = pd.concat([df, one_hot_df], axis=1) movie_id gernes Action Adventure Fantasy Sci-Fi Thriller0 0 Action|Adventure|Fantasy|Sci-Fi 1 1 1 1 01 1 Action|Adventure|Fantasy 1 1 1 0 02 2 Action|Adventure|Thriller 1 1 0 0 13 3 Action|Thriller 1 0 0 0 14 4 Action|Adventure|Sci-Fi 1 1 0 1 0