单个功能的多个分类值如何使用python将它们转换为二进制

单个功能的多个分类值如何使用python将它们转换为二进制,python,python-3.x,pandas,scikit-learn,Python,Python 3.x,Pandas,Scikit Learn,我有一个电影数据集,有28列。其中之一是体裁。对于该数据集中的每一行,列类型的值的形式为“动作|动画|喜剧|家庭|幻想”。 我想使用pandas.get_dummies()对它们进行编码,但由于列有多个值,如何处理这种情况 我已经附上了样本数据,但只有相关列。 我希望输出为 但当我使用下面的代码将分类值转换为二进制时 import pandas as pd Data = pd.read_csv('sample.csv', encoding = "ISO-8859-1") DataConverte

我有一个电影数据集,有28列。其中之一是体裁。对于该数据集中的每一行,列类型的值的形式为“动作|动画|喜剧|家庭|幻想”。 我想使用pandas.get_dummies()对它们进行编码,但由于列有多个值,如何处理这种情况

我已经附上了样本数据,但只有相关列。 我希望输出为

但当我使用下面的代码将分类值转换为二进制时

import pandas as pd
Data = pd.read_csv('sample.csv', encoding = "ISO-8859-1")
DataConverted = pd.get_dummies(Data)
DataConverted.to_csv('sample_out.csv')
输出如下图所示(我不能发布两张以上的图像):


这一个有点棘手,但我可以保证没有很多类型。所以你可以用形式为2^n的值来做常数。例如,动作类型将具有常量值1;冒险类型可能为2;幻想4。然后,您可以使用常量值保存执行“或”操作的类型。例如,如果《阿凡达》的类型是动作和幻想,而不是冒险。你会这样保存它的

  const int ACTION = 1, ADVENTURE = 2, FANTASY = 4;
  movie.genre = movie.genre | ACTION | FANTASY
然后,当您读取列gender的值时,必须对每个常量值执行“and”操作。例如,要知道《阿凡达》的类型是否是动作,您只需执行以下操作并查看它是否是冒险:

    if(movie.genre & ACTION == ACTION)
         print("Action movie") //will execute
    if(movie.genre & ADVENTURE == ADVENTURE)
         print("Adventure movie") //won't execute

现在,对于十进制值,它可能对您没有意义。但是你必须用二进制值来考虑这个问题;1是0001;2=0010和4=0100。在化身示例中执行“或”操作将使您的类型等于01001。在十进制计数系统中为5。但01001实际上并不是一种类型。所以,要知道一部电影是否是一种特定的类型,您必须使用常量值执行“和”操作。因此,表演电影类型和动作相当于01001&00001=00001。现在,值00001与解释为动作的常量值相同。这意味着,《阿凡达》是一部动作片,但不是一部冒险片,因为01001和00010等于零,而不是冒险的常量值(2)。

这里有一个更好答案的原始问题:
    if(movie.genre & ACTION == ACTION)
         print("Action movie") //will execute
    if(movie.genre & ADVENTURE == ADVENTURE)
         print("Adventure movie") //won't execute