Удалите строки отсутствующего класса И строки с более чем 4 отсутствующими объектами - PullRequest
0 голосов
/ 05 октября 2018

Ну, как сказал заголовок.Я так стараюсь просто использовать 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)

Я полагаю, чтобы получить некоторые значения обратно, вместо этого я получил ноль

[]
[]
[]

Что мне здесь не хватает?Пожалуйста, просветите меня.

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте data = np.array([i for i in data if len(i[~np.isnan(i)])>10])

Понимание списка предназначено для выбора тех строк, которые имеют более 10 значений, отличных от нан (что означает удаление строк с 4 или более пропущенными значениями). В результате получается 2-й список.преобразуется в массив NumPy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...