Pandas – 填补分类数据中的NaN
现实世界中的数据充满了缺失值。为了对其进行处理,我们需要对这些缺失的数值进行估算,并从中得出有意义的结论。在这篇文章中,我们将讨论如何填补分类数据中的NaN值。在分类特征的情况下,我们不能使用统计学的归因方法。
让我们首先创建一个样本数据集,了解填补缺失值的方法。
# import modules
import numpy as np
import pandas as pd
# create dataset
data = {'Id': [1, 2, 3, 4, 5, 6, 7, 8],
'Gender': ['M', 'M', 'F', np.nan,
np.nan, 'F', 'M', 'F'],
'Color': [np.nan, "Red", "Blue",
"Red", np.nan, "Red",
"Green", np.nan]}
# convert to data frame
df = pd.DataFrame(data)
display(df)
输出:
为了填补分类特征中的缺失值,我们可以采用下面提到的任何一种方法。
方法1:用最多出现的类别进行填充。
填补这些缺失值的一个方法是用最常见的或出现过的类来代替它们。我们可以通过使用value_counts()方法来确定最常见类的索引来做到这一点。让我们来看看这个例子是如何工作的。
# filling with most common class
df_clean = df.apply(lambda x: x.fillna(x.value_counts().index[0]))
df_clean
输出:
方法2:用未知类填充。
有时,缺失的信息本身是有价值的,用最常见的类来归纳它并不合适。在这种情况下,我们可以使用fillna()方法用 “未知 “或 “缺失 “这样的值来替换它们。让我们来看看这个例子–
# filling with Unknown class
df_clean = df.fillna("Unknown")
df_clean
输出:
方法3:使用sklearn-pandas库的分类输入法。
我们有scikit learn imputer,但它只对数字数据起作用。所以我们有sklearn_pandas,它的转化器与之相当,可以对字符串数据起作用。它用该列中最频繁的值来替换缺失值。让我们看一个替换 “颜色 “列的NaN值的例子 —
# using sklearn-pandas package
from sklearn_pandas import CategoricalImputer
# handling NaN values
imputer = CategoricalImputer()
data = np.array(df['Color'], dtype=object)
imputer.fit_transform(data)
输出: