熊猫fillna引发ValueError:填充值必须在类别中

时间:2018-12-07 07:18:31

标签: python pandas dataframe fillna

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

下面是代码:

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

4 个答案:

答案 0 :(得分:1)

在尝试摆脱所有NaN时,我在数据框中遇到了相同的错误。
我并没有花太多时间,但是用.fillna()代替.replace(np.nan, value)可以解决问题。
请谨慎使用,因为我不确定np.nan是否会捕获所有被解释为NaN的值

答案 1 :(得分:0)

使用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 :(得分:0)


就我而言,当我遇到该错误时,我正在对具有许多功能的数据框使用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“类别”的特征,并使用上述逻辑对其进行转换。

答案 3 :(得分:0)

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

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