如何处理分类输入转换器中的数值变量?
How to handle numerical variables in categorical imputer transformer?
我有一个包含分类值的列 grade
的数据框。我的问题导致值的类型是 float
而不是 object
.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"key": ["K0", "K1", "K2", "K3", "K4"],
"grade": [1.0, 2.0, 2.0, np.nan, 3.0],
}
)
df =
key grade
0 K0 1.0
1 K1 2.0
2 K2 2.0
3 K3 NaN
4 K4 3.0
我在 grade
列中缺少值。我想通过使用基于 sklearn 的 feature-engine
来用最频繁的值来估算缺失值。 Feature-engine包括广泛使用的缺失数据插补方法,例如均值和中位数插补、频繁类别插补、随机样本插补。
安装并加载库:
! pip install feature-engine
from feature_engine.imputation import CategoricalImputer
应用输入法:
# set up the imputer
imputer = CategoricalImputer(variables=['grade'], imputation_method='frequent')
# fit the imputer
imputer.fit(df)
# transform the data
df = imputer.transform(df)
df.head()
我得到以下 TypeError
:
TypeError: Some of the variables are not categorical. Please cast them as object before calling this transformer
我明白这个错误,但我不明白它为什么会出现。根据 docs,feature-engine
可以用这个转换器处理数值变量。
我的问题是:
- 如何使用同一个变压器解决这个问题?我误解了文档吗?
- 如果这个变压器不工作,您还有什么建议的解决方案?
在使用imputer之前,将成绩栏的dtype
改为object
,
df = pd.DataFrame(
{
"key": ["K0", "K1", "K2", "K3", "K4"],
"grade": [1.0, 2.0, 2.0, np.nan, 3.0],
}
)
df["grade"] = df.grade.astype("object")
imputer = CategoricalImputer(variables=['grade'], imputation_method='frequent')
imputer.fit(df)
df = imputer.transform(df)
df.head()
key grade
0 K0 1.0
1 K1 2.0
2 K2 2.0
3 K3 2.0
4 K4 3.0
如果在估算使用后您希望等级的 dtype 为 string/object,
imputer = CategoricalImputer(variables=['grade'],
imputation_method='frequent',
return_object=True)
# this returns
key grade
0 K0 1
1 K1 2
2 K2 2
3 K3 2
4 K4 3
CategoricalImputer 仅用于估算分类变量。这就是为什么默认情况下它仅适用于对象或分类类型的变量。
但是,在某些情况下,数值变量希望被视为分类变量。在旧版本的包中,为了这样做,我们需要将变量的格式更改为对象,如 Abhi 所述。
从 1.1 版开始,您可以通过在转换器中设置参数 ignore_format=True
直接使用 CategoricalImputer 估算数值变量。
我有一个包含分类值的列 grade
的数据框。我的问题导致值的类型是 float
而不是 object
.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"key": ["K0", "K1", "K2", "K3", "K4"],
"grade": [1.0, 2.0, 2.0, np.nan, 3.0],
}
)
df =
key grade
0 K0 1.0
1 K1 2.0
2 K2 2.0
3 K3 NaN
4 K4 3.0
我在 grade
列中缺少值。我想通过使用基于 sklearn 的 feature-engine
来用最频繁的值来估算缺失值。 Feature-engine包括广泛使用的缺失数据插补方法,例如均值和中位数插补、频繁类别插补、随机样本插补。
安装并加载库:
! pip install feature-engine
from feature_engine.imputation import CategoricalImputer
应用输入法:
# set up the imputer
imputer = CategoricalImputer(variables=['grade'], imputation_method='frequent')
# fit the imputer
imputer.fit(df)
# transform the data
df = imputer.transform(df)
df.head()
我得到以下 TypeError
:
TypeError: Some of the variables are not categorical. Please cast them as object before calling this transformer
我明白这个错误,但我不明白它为什么会出现。根据 docs,feature-engine
可以用这个转换器处理数值变量。
我的问题是:
- 如何使用同一个变压器解决这个问题?我误解了文档吗?
- 如果这个变压器不工作,您还有什么建议的解决方案?
在使用imputer之前,将成绩栏的dtype
改为object
,
df = pd.DataFrame(
{
"key": ["K0", "K1", "K2", "K3", "K4"],
"grade": [1.0, 2.0, 2.0, np.nan, 3.0],
}
)
df["grade"] = df.grade.astype("object")
imputer = CategoricalImputer(variables=['grade'], imputation_method='frequent')
imputer.fit(df)
df = imputer.transform(df)
df.head()
key grade
0 K0 1.0
1 K1 2.0
2 K2 2.0
3 K3 2.0
4 K4 3.0
如果在估算使用后您希望等级的 dtype 为 string/object,
imputer = CategoricalImputer(variables=['grade'],
imputation_method='frequent',
return_object=True)
# this returns
key grade
0 K0 1
1 K1 2
2 K2 2
3 K3 2
4 K4 3
CategoricalImputer 仅用于估算分类变量。这就是为什么默认情况下它仅适用于对象或分类类型的变量。
但是,在某些情况下,数值变量希望被视为分类变量。在旧版本的包中,为了这样做,我们需要将变量的格式更改为对象,如 Abhi 所述。
从 1.1 版开始,您可以通过在转换器中设置参数 ignore_format=True
直接使用 CategoricalImputer 估算数值变量。