首页 > 解决方案 > 删除缺失类的行 AND 缺失特征超过 4 个的行

问题描述

嗯,正如标题所说。我正在努力只使用 Numpy 来规范化数据集。

数据集应如下所示:

class,Alcohol,Malic acid,Ash,Alcalinity of ash,Magnesium,Total 
phenols,Flavanoids,Nonflavanoid phenols,Proanthocyanins,Color 
intensity,Hue,OD280/OD315,Proline
1.0,14.23,1.71,2.43,15.6,127.0,2.8,3.06,0.28,2.29,5.64,1.04,3.92,1065.0
,13.2,1.78,,11.2,100.0,2.65,2.76,0.26,1.28,4.38,1.05,3.4,1050.0
1.0,13.16,2.36,,18.6,101.0,2.8,3.24,0.3,2.81,5.68,1.03,3.17,1185.0
1.0,14.37,,2.5,,,3.85,,,,7.8,,
1.0,13.86,1.35,,16.0,98.0,2.98,,0.22,1.85,7.22,1.01,3.55,1045.0
1.0,14.1,2.16,,18.0,,2.95,,0.22,2.38,5.75,1.25,3.17,1510.0
,14.12,1.48,,16.8,95.0,2.2,2.43,0.26,1.57,5.0,1.17,2.82,1280.0
1.0,13.75,1.73,,16.0,89.0,2.6,2.76,0.29,1.81,5.6,1.15,2.9,1320.0
1.0,14.75,1.73,,11.4,91.0,3.1,3.69,0.43,2.81,5.4,1.25,2.73,1150.0
1.0,14.38,1.87,2.38,12.0,102.0,3.3,,0.29,2.96,7.5,1.2,3.0,1547.0
,13.63,1.81,2.7,17.2,112.0,2.85,2.91,0.3,1.46,7.3,1.28,2.88,1310.0

有 14 个特征和 100 个数据。我正在尝试删除缺少类的行并删除缺少 4 个功能的行。

好的,我认为问题很清楚,这就是我所做的:

删除缺少类特征的行:

remove_nan = data[~np.isnan(data).any(axis=1)]

删除缺少类特征和 4 个缺失特征的行:

class_index=14 #14 features
num_classes=3  # 1,2,3 classes
nan_indexes=np.isnan(data)
nan_counts=np.sum(nan_indexes,axis=1)
for class_value in range (0,num_classes):
     filtered_rows = [row for row, nan_count in zip(raw_data, 
                   nan_counts)] if row[class_index]==class_value and nan_count < 4]
     print(filtered_rows)

我想取回一些值,而不是我得到了 null

[]
[]
[]

我在这里想念什么?请赐教。

标签: pythonnumpy

解决方案


尝试data = np.array([i for i in data if len(i[~np.isnan(i)])>10])

列表理解用于挑选那些具有超过 10 个非 nan 值的行(因此删除具有 4 个或更多缺失值的行)。然后将生成的二维列表转换为 numpy 数组。


推荐阅读