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

熊猫数据帧编码具有数千个唯一值的类别变量

柴正祥
2023-03-14

我有一个关于几千个城市学校数据的数据框。学校是行标识符,城市编码如下:

school city          category   capacity
1      azez6576sebd  45         23
2      dsqozbc765aj  12         236
3      sqdqsd12887s  8          63 
4      azez6576sebd  7          234 
...

知道我有几千个城市,如何将城市变量转换为数字?我想一个热编码是不合适的,因为我会有太多的列。将千级分类变量转换为数字变量的一般方法是什么?

谢谢你。

共有3个答案

邴兴为
2023-03-14

在生产ML系统中使用的最佳方法

1)正面标签数目2)负面标签数目3)比率

这里有一个视频解释它——大规模学习——米哈伊尔·比伦科博士

散列编码器也适用于“city”列具有数千个不同值的情况。这种方法可以很好地扩展。您需要指定要作为输出的二进制输出列的数量。

监督学习案例的另一个选择是目标编码器或詹姆斯·斯坦编码器。此技术将每个类别替换为具有该类别的行的目标的平均值。但是如果您的数据集样本不是很大,并且每个类别只有几个示例,这种方法可能不是很有用。

这是我提到的一篇有用的博客文章——编码类别变量

姬翰林
2023-03-14

在ML分类器的上下文中,数千列仍然是可管理的。尽管你想提防维度的诅咒。

除此之外,您不希望一个get_dummies调用导致内存井喷,所以您可以生成一个SparseDataFrame来代替-

v = pd.get_dummies(df.set_index('school').city, sparse=True)
v

        azez6576sebd  dsqozbc765aj  sqdqsd12887s
school                                          
1                  1             0             0
2                  0             1             0
3                  0             0             1
4                  1             0             0

type(v)
pandas.core.sparse.frame.SparseDataFrame

可以使用生成稀疏矩阵sdf.to_coo-

v.to_coo()

<4x3 sparse matrix of type '<class 'numpy.uint8'>'
    with 4 stored elements in COOrdinate format>
吕晟睿
2023-03-14

你可以在skLearning中使用类别dtype,应该是label编码器

df.city=df.city.astype('category').cat.codes
df
Out[385]: 
   school  city  category  capacity
0       1     0        45        23
1       2     1        12       236
2       3     2         8        63
3       4     0         7       234
 类似资料:
  • 我有两个Dataframes一个与日期集(df1)和另一个与emp_ids集(df2)。我试图创建一个新的Dataframe,这样df2中的每个emp_id都被标记为df1中的每个日期。 下面给出了我的数据帧的外观 df1 df2 预期产出: 我将日期列转换为字符串,并尝试执行以下操作,但返回的数据框为空 我尝试做

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且

  • 我有这个熊猫数据框 这就给了我: 我该怎么办 做一个新的人物, 将标题添加到图"标题这里" 以某种方式创建一个映射,这样标签不是29,30等,而是“29周”,“30周”等。 将图表的较大版本保存到我的计算机(例如10 x 10英寸) 这件事我已经琢磨了一个小时了!

  • 我在Python中使用一个视频游戏的熊猫DataFrame,每个游戏都有一种类型。我正在尝试删除任何在DataFrame中出现次数少于一定次数的类型的视频游戏,但我不知道该怎么做。我确实发现了一个StackOverflow问题,这个问题似乎是相关的,但我根本无法破译这个解决方案(可能是因为我从未听说过R,而且我对函数编程的记忆充其量也很生疏)。 帮助?

  • 我正在尝试连接到数据帧。它们看起来像这样 期望的最终目标是: 我一直试图使用pd.merge和。连接函数与on='外'设置不成功

  • 我有点被困在提取一个变量的值和另一个变量的条件上。例如,以下数据帧: 当时,如何获取的值?每次提取的值时,都会得到一个对象,而不是字符串。