【问题标题】:How do I create a Categorial with my own levels in Pandas?如何在 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

那么,我该怎么做呢?

【问题讨论】:

    标签: python pandas


    【解决方案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 上提出拉取请求吗?我们非常欢迎任何社区贡献
      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2021-02-05
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多