【问题标题】:Pandas fillna throws ValueError: fill value must be in categoriesPandas fillna 抛出 ValueError:填充值必须在类别中
【发布时间】:2018-12-07 07:18:30
【问题描述】:

说明:这两个功能都属于分类数据类型。我在不同的内核中使用了这段代码 dateset 工作正常,唯一的区别是功能在 flote64 中。后来我将这些特征数据类型转换为分类 因为数据集中的所有特征都代表类别。

下面是代码:

AM_train['product_category_2'].fillna('Unknown', inplace =True)
AM_train['city_development_index'].fillna('Missing', inplace =True)

【问题讨论】:

  • 您可以在转换为类别之前处理缺失值,这是一种更好的方法。

标签: python pandas dataframe fillna


【解决方案1】:

使用Series.cat.add_categories首先添加类别:

AM_train['product_category_2'] = AM_train['product_category_2'].cat.add_categories('Unknown')
AM_train['product_category_2'].fillna('Unknown', inplace =True) 

AM_train['city_development_index'] = AM_train['city_development_index'].cat.add_categories('Missing')
AM_train['city_development_index'].fillna('Missing', inplace =True)

示例

AM_train = pd.DataFrame({'product_category_2': pd.Categorical(['a','b',np.nan])})
AM_train['product_category_2'] = AM_train['product_category_2'].cat.add_categories('Unknown')
AM_train['product_category_2'].fillna('Unknown', inplace =True) 

print (AM_train)
  product_category_2
0                  a
1                  b
2            Unknown

【讨论】:

  • 非常清晰和解释性很好的例子。
【解决方案2】:

始终在第二次运行 fillna 之前加载原始数据集而不使用 inplace=True。

出现这个问题是因为,你运行了两次代码,所以无法执行fillna。

【讨论】:

    【解决方案3】:

    在尝试摆脱所有 NaN 时,我在数据框中遇到了同样的错误。
    我没有过多研究它,但是用.fillna() 代替.replace(np.nan, value) 就可以了。
    谨慎使用,因为我不确定 np.nan 是否捕获所有被解释为 NaN 的值

    【讨论】:

      【解决方案4】:


      就我而言,当我遇到该错误时,我在具有许多功能的数据帧上使用了 fillna。
      我更喜欢先将必要的特征转换为字符串,然后使用 fillna,最后在需要时将它们转换回类别。

      AM_train['product_category_2'] = AM_train['product_category_2'].astype('string')
      AM_train['product_category_2'].fillna('Unknown', inplace =True)
      AM_train['product_category_2'] = AM_train['product_category_2'].astype('category')
      

      它也可以是自动化的,搜索具有 dtype 'category' 的所有特征并使用上述逻辑对其进行转换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-05
        • 2018-04-26
        • 1970-01-01
        • 2021-01-10
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        相关资源
        最近更新 更多