Pandas – 在分类数据中填充 NaN
现实世界的数据充满了缺失值。为了研究它们,我们需要估算这些缺失值并从中得出有意义的结论。在本文中,我们将讨论如何在分类数据中填充 NaN 值。在分类特征的情况下,我们不能使用统计插补方法。
让我们首先创建一个示例数据集来了解填充缺失值的方法:
Python3
# 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)
Python3
# filling with most common class
df_clean = df.apply(lambda x: x.fillna(x.value_counts().index[0]))
df_clean
Python3
# filling with Unknown class
df_clean = df.fillna("Unknown")
df_clean
Python3
# 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)
输出:
为了填补分类特征中的缺失值,我们可以采用下面提到的任何一种方法——
方法 1:填充出现次数最多的类
填充这些缺失值的一种方法是用最常见或出现的类替换它们。我们可以通过使用可以使用value_counts()确定的最常见类的索引来做到这一点 方法。让我们看看它是如何工作的例子:
蟒蛇3
# filling with most common class
df_clean = df.apply(lambda x: x.fillna(x.value_counts().index[0]))
df_clean
输出:
方法二:用未知类填充
有时,缺失的信息本身就很有价值,将其归入最常见的类别是不合适的。在这种情况下,我们可以使用fillna()方法将它们替换为“未知”或“缺失”之类的值。让我们看一个这样的例子——
蟒蛇3
# filling with Unknown class
df_clean = df.fillna("Unknown")
df_clean
输出:
方法三:使用sklearn-pandas库的Categorical Imputer
我们有 scikit learn imputer,但它仅适用于数值数据。所以我们有sklearn_pandas和等效的转换器,它可以处理字符串数据。它用该列中最常见的值替换缺失值。让我们看一个替换“颜色”列的 NaN 值的例子——
蟒蛇3
# 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)
输出: