Удаление значений NaN из столбцов в массивах с накоплением

У меня есть массив из трех строк и около 25000 столбцов. Я пытаюсь удалить те столбцы, которые имеют значения NaN в любом из трех столбцов, но изо всех сил пытаюсь это сделать. До сих пор мне удалось сделать следующее, что позволяет отбрасывать строки со значениями NaN.

x = np.array([[1,2,3,1,2,3], 
              [4,5,np.nan,3,5,np.nan], 
              [7,8,9,4,5,6],])

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

Если я использую ось = 0, это не сработает. Я пытаюсь не преобразовывать его в фрейм данных, поскольку он используется в качестве массива в рабочем процессе, но я думаю, что обходным путем было бы преобразовать его в фрейм данных, удалить и реорганизовать его как массив. Может быть, у кого-то есть идея, как сделать это как массив:)


person benjaminbluemchen    schedule 13.05.2020    source источник


Ответы (1)


Вы можете использовать np.isnan(x).any(axis=0), чтобы найти столбцы, которые содержат хотя бы одно значение np.nan, затем вы можете использовать эту маску для фильтрации столбцов данного массива. Использовать:

x = np.array([[1,2,3,1,2,3], 
              [4,5,np.nan,3,5,np.nan], 
              [7,8,9,4,5,6],])

x = x[:, ~np.isnan(x).any(axis=0)]
print(x)

Это печатает:

[[1. 2. 1. 2.]
 [4. 5. 3. 5.]
 [7. 8. 4. 5.]]
person Shubham Sharma    schedule 13.05.2020