Pandas fillna throws ValueError: fill value must be in categories
Pandas fillna throws ValueError: fill value must be in categories
描述:两个特征都是分类数据类型。我在相同的不同内核中使用了这段代码
dateset 工作正常,唯一的区别是功能在 flote64 中。后来我将这些特征 dtypes 转换为 Categorical
因为数据集中的所有特征都代表类别。
代码如下:
AM_train['product_category_2'].fillna('Unknown', inplace =True)
AM_train['city_development_index'].fillna('Missing', inplace =True)
首先使用 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
我在尝试删除所有 NaN 时在数据框中遇到了同样的错误。
我没有看太多,但是用 .fillna()
代替 .replace(np.nan, value)
就成功了。
谨慎使用,因为我不确定 np.nan
捕获所有解释为 NaN
的值
就我而言,当我遇到该错误时,我正在对具有许多功能的数据框使用 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' 的所有特征并使用上面的逻辑转换它们。
在没有 inplace=True 的情况下加载原始数据集,总是在 运行第二次填充之前加载。
出现这个问题是因为,你运行两次代码,所以fillna无法执行。
描述:两个特征都是分类数据类型。我在相同的不同内核中使用了这段代码 dateset 工作正常,唯一的区别是功能在 flote64 中。后来我将这些特征 dtypes 转换为 Categorical 因为数据集中的所有特征都代表类别。
代码如下:
AM_train['product_category_2'].fillna('Unknown', inplace =True)
AM_train['city_development_index'].fillna('Missing', inplace =True)
首先使用 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
我在尝试删除所有 NaN 时在数据框中遇到了同样的错误。
我没有看太多,但是用 .fillna()
代替 .replace(np.nan, value)
就成功了。
谨慎使用,因为我不确定 np.nan
捕获所有解释为 NaN
就我而言,当我遇到该错误时,我正在对具有许多功能的数据框使用 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' 的所有特征并使用上面的逻辑转换它们。
在没有 inplace=True 的情况下加载原始数据集,总是在 运行第二次填充之前加载。
出现这个问题是因为,你运行两次代码,所以fillna无法执行。