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

📅  最后修改于: 2023-12-03 14:45:02.944000             🧑  作者: Mango

Pandas – 在分类数据中填充 NaN

在数据预处理中,可能遇到一些空值/缺失值,需要进行填充处理。但是,在分类数据中填充数据,需要考虑的一些细节。

分类数据

Pandas 中的分类数据是一组有限的值或者名字。例如,性别可以被分为“男”和“女”,彩虹颜色可以是“红”、“橙”、“黄”、“绿”、“蓝”、“靛”、“紫”,等等。

使用 Pandas 的 pd.Categorical() 函数可以将某个列表、Series 或者数组转换为分类数据。

import pandas as pd

s = pd.Series(['male', 'female', 'male', 'male', 'female', 'male'])

s_cat = s.astype('category')

这样,Series 中的元素将被看作是分类数据,并且只有两个类别:male 和 female。

在处理分类数据时,有可能需要将某些缺失值填充。下面将介绍三种在分类数据中填充 NaN 的方法。

1. 使用最频繁的值填充

可以使用 value_counts() 函数找到分类数据中出现频率最高的元素,然后使用 fillna() 函数将 NaN 填充为该值。

# 最频繁的 gender 是 male
mode = s_cat.mode()[0]
s_cat.fillna(mode)
2. 使用 KNN 填充

使用 KNN(k-nearest neighbors)算法,根据与缺失值最接近的 K 个邻居的值进行填充。具体方法是:

  • 对于每个缺失值,找到距离它最近的 K 个邻居。
  • 计算这 K 个邻居的平均值或中位数。
  • 使用这个平均值或中位数填充缺失值。

可以使用 fancyimpute 库的 KNN() 函数实现 KNN 填充,具体使用方法和参数请参考官方文档。

from fancyimpute import KNN

s_knn = KNN(k=3).complete(s_cat)
3. 使用连续型变量填充

如果分类数据中有某些特征与连续型变量相关,可以尝试使用这些连续型变量进行填充。例如,在预测性别时,可以根据身高、体重等连续型变量进行填充。

具体方法是:

  • 建立一个简单的模型,例如线性回归模型,将分类数据作为目标变量,将连续型变量作为特征变量。
  • 预测缺失值,使用预测值替换缺失值。
from sklearn.linear_model import LinearRegression

# 使用身高作为特征变量,并建立线性回归模型
reg = LinearRegression().fit(X=s_cat, y=height)

# 预测缺失值
height_filled = reg.predict(X=missing_s_cat)

# 使用预测值填充缺失值
missing_s_cat.fillna(pd.Series(height_filled))

以上就是在分类数据中填充缺失值的三种方法,根据实际情况进行选择。