如何在 Pandas 中创建具有自己级别的类别?

Posted

技术标签:

【中文标题】如何在 Pandas 中创建具有自己级别的类别?【英文标题】:How do I create a Categorial with my own levels in Pandas? 【发布时间】:2012-09-23 19:21:44 【问题描述】:

我正在阅读 CSV,我想将其中一列设为分类,并按我自己的顺序排列。我怎么做?这三个标签是“读”、“写”和“混合”。以下是一些不起作用的事情:

Categorical(my_csv.rw, ['read', 'write', 'mixed'])
    ValueError: invalid literal for long() with base 10: 'mixed'

Categorical(my_csv.rw, Index(['read', 'write', 'mixed']))
    ValueError: invalid literal for long() with base 10: 'mixed'

Categorical(['read', 'mixed', 'write'], Index(['read', 'write', 'mixed']))
    ValueError: invalid literal for long() with base 10: 'mixed'

Categorical.from_array(['read', 'mixed', 'write']) # Levels in wrong order

那么,我该怎么做呢?

【问题讨论】:

【参考方案1】:

Categorical 需要一个整数数组和一个级别数组:

In [14]: Categorical([0, 1, 2], Index(['read', 'write', 'mixed']))
Out[14]: 
Categorical: 
array([read, write, mixed], dtype=object)
Levels (3): Index([read, write, mixed], dtype=object)

我不相信它会做很多错误检查(因为它们通常是由其他函数创建的),但这可以改变。

【讨论】:

【参考方案2】:

我相信级别是按标签排序的:

In [38]: a.levels
Out[38]: Index([mixed, read, write], dtype=object)

In [39]: a.labels
Out[39]: array([1, 0, 2])

【讨论】:

这是默认设置。是否可以更改默认值? 不幸的是,现在不行。不过,添加诸如 sort_labels、sort_levels 和/或 sort(indexer) 之类的方法应该很容易。你有兴趣在 github 上提出拉取请求吗?我们非常欢迎任何社区贡献

以上是关于如何在 Pandas 中创建具有自己级别的类别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NativeScript 中创建具有动态行数和列数的表?

如何在 Python 中创建具有两列作为元组或 Pandas 数据框的单个变量?

如何在所有缩放级别中创建具有相同半径的谷歌地图 v3 圆?

如何从具有多个值和预定义类别的列表中创建虚拟对象? [复制]

从具有大量标签的 Pandas 数据框中创建 TensorFlow 数据集?

如何在 GBQ 中创建具有特定模式的空表?