如何在 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 数据框的单个变量?
如何从具有多个值和预定义类别的列表中创建虚拟对象? [复制]