25

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

下面是代码:

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

4 回答 4

42

用于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
于 2018-12-07T07:20:30.090 回答
2

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

于 2020-09-23T19:10:35.457 回答
2

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

出现此问题的原因是,您运行了两次代码,因此无法执行 fillna。

于 2021-05-20T16:34:49.417 回答
1


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

于 2020-10-23T10:50:20.600 回答