当前位置: 首页 > 知识库问答 >
问题:

将一个热编码列复制到假人,包括“其他”编码[重复]

南宫星波
2023-03-14

我的最终目标是对熊猫专栏进行热编码。在本例中,我想对一列“b”进行热编码,如下所示:保存苹果、香蕉和桔子,并将任何其他水果编码为“其他”。

示例:在下面的代码中,“葡萄柚”将被改写为“其他”,如果“猕猴桃”和“鳄梨”出现在我的数据中,它们也将被改写为“其他”。

以下代码有效:

df = pd.DataFrame({
    "a": [1,2,3,4,5],
    "b": ["apple", "banana", "banana", "orange", "grapefruit"],
    "c": [True, False, True, False, True],
})
print(df)

def analyze_fruit(s):
    if s in ("apple", "banana", "orange"):
        return s
    else:
        return "other"

df['b'] = df['b'].apply(analyze_fruit)

df2 = pd.get_dummies(df['b'], prefix='b')
print(df2)

我的问题是:有没有一种更短的方法来做analyze\u fruit()业务?我尝试了DataFrame。将()替换为否定的先行断言,但未成功。


共有1个答案

弓温书
2023-03-14
匿名用户

您可以在get_dummies之前设置category,然后fillna任何与设置的类别不匹配的内容都将变为NaN,可以通过fillna轻松填充。Category的另一个好处是,这里还可以通过添加ordered=True来定义排序:

df['b'] = pd.Categorical(
    df['b'],
    categories=['apple', 'banana', 'orange', 'other']
).fillna('other')

df2 = pd.get_dummies(df['b'], prefix='b')

用类似于np.where的标准替换在这里也可以工作,但是通常虚拟数据用于类别数据,因此能够添加顺序,以便虚拟列以设置的顺序出现可能会有所帮助:

# import numpy as np


df['b'] = np.where(df['b'].isin(['apple', 'banana', 'orange']),
                   df['b'],
                   'other')

df2 = pd.get_dummies(df['b'], prefix='b')

两者都产生df2:

   b_apple  b_banana  b_orange  b_other
0        1         0         0        0
1        0         1         0        0
2        0         1         0        0
3        0         0         1        0
4        0         0         0        1

 类似资料:
  • 我试图在Iris数据集中的目标列(“物种”)上使用一个热编码器。 但我得到了以下错误: ValueError:预期的2D数组,得到1D数组代替: 使用数组或数组重塑数据的形状。如果数据具有单个要素或阵列,则重塑(-1,1)。如果(1,-1)包含单个样本,则重塑其形状。 我在谷歌上搜索了这个问题,发现大多数scikit学习估计器都需要2D数组,而不是一维数组。 同时,我还发现,我们可以尝试传递带有索

  • 对于一篇研究论文,我将使用套索模型进行分类和特征选择。我正准备使用一种热编码来处理分类数据,并需要找出哪些特征映射到原始分类值,以确定最终为最终模型选择了哪些特征。我在谷歌上搜索这个问题已经有一段时间了,但还没有找到答案。 scikit的一个热编码如何分配值?例如,假设某个变量的分类值为{1,2,3,4}。一个热编码是否按时间顺序将它们组织为虚拟对象(即,删除1,将第一个虚拟对象设置为值2,将第二

  • 如果我们不确定分类特征的性质,比如它们是名词性的还是序数的,我们应该使用哪种编码?顺序编码还是一个热编码?关于这个话题有没有明确的规定? 我看到很多人对没有方向的分类数据使用顺序编码。假设一个频率表: 有很多人更喜欢在这个专栏上做顺序编码。我非常想用一热编码。我对此的看法是,做序数编码会给这些颜色分配一些有序的数字,这意味着一个排名。而且没有排名第一。换句话说,我的模型不应该认为color_whi

  • 我在列表中有一个列名称,我想对列表中的列中的值进行热编码。我想从数据集中对分类变量进行编码。我尝试了几个过程,但它给我带来了一个错误 它抛出的错误 回溯(最后一次调用):文件“preprocessing.py”,第83行,trainig_set_ed[col]=clfs[col].fit_transform(trainig_set_ed[col])文件“/root/.local/lib/pytho

  • 问题内容: 张量流是否具有类似于scikit Learn的一种用于处理分类数据的热编码器?使用tf.string的占位符会表现为分类数据吗? 我意识到我可以在将数据发送到tensorflow之前对其进行手动预处理,但是将其内置非常方便。 问题答案: 从TensorFlow 0.8开始,现在有一个原生的一站式操作,可以将一组稀疏标签转换为密集的一站式表示形式。这是的补充,在某些情况下,您可以使您直接

  • 我有一个这样的文本文件: 输入文件中的最后一个字段的长度为50k个字符,并且只有0、1或2个字符。我想要最后一个字段的一个热编码版本。因此,我的预期结果是这样的数据帧: 我通过读取输入文件创建了一个初始数据帧: 这将创建一个包含3列的数据帧: 我想我也许可以使用下面的东西创建初始的单独列,然后使用熊猫get_dummies函数进行一次热编码,但是我无法创建单独的列。我已经试过了 但这并不是把角色分