📜  Pandas – 在分类数据中填充 NaN

📅  最后修改于: 2022-05-13 01:55:01.377000             🧑  作者: Mango

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)

输出: