【问题标题】:Multiple Categorical values for a single feature how to convert them to binary using python单个特征的多个分类值如何使用python将它们转换为二进制
【发布时间】:2023-04-03 21:02:01
【问题描述】:

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

我附上了样本数据,但只有相关的列Data。 我期待输出为Output

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

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')

输出如下所示(我不能发布超过两张图片):

movie_title_Avatar ,movie_title_Pirates of the Caribbean: At World's End ,movie_title_Spectre ,genres_Action|Adventure|Fantasy,genres_Action|Adventure|Fantasy|Sci-Fi,genres_Action|Adventure|Thriller
1.0,0.0,0.0,0.0,1.0,0.0
0.0,1.0,0.0,1.0,0.0,0.0
0.0,0.0,1.0,0.0,0.0,1.0

【问题讨论】:

标签: python python-3.x pandas scikit-learn


【解决方案1】:

这里的这个有点棘手,但我可以保证没有很多类型。因此,您可以使用 2^n 形式的值创建常量。例如,动作类型将具有常量值 1;冒险类型可能是 2;和幻想 4。然后,您可以使用常量值保存执行“或”运算的类型。例如,如果 Avatar 类型是动作和奇幻,而不是冒险。你会像这样保存它

  const int ACTION = 1, ADVENTURE = 2, FANTASY = 4;
  movie.genre = movie.genre | ACTION | FANTASY

然后,当您读取列gender 的值时,您将不得不对每个常量值执行“与”运算。例如,要知道 Avatar 的类型是否是动作,您只需执行以下操作并查看它是否是冒险:

    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。在 Avatar 示例中执行“或”运算将导致您使流派等于 01001。在十进制枚举系统中为 5。但 01001 实际上并不是一个流派类型。因此,要知道电影是否属于特定类型,您必须使用常量值执行“与”运算。因此,执行 movie.genre & ACTION 等价于 01001 & 00001 = 00001。现在,值 00001 与解释为 ACTION 的常量值相同。这意味着,阿凡达是一部动作片,而不是一部冒险片,因为 01001 和 00010 等于 0,而不是等于 ADVENTURE (2) 的常数值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多