Удаление nan из массива строк - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть следующий массив:

data=array([['beef', 'bread', 'cane_molasses', nan, nan, nan],
       ['brassica', 'butter', 'cardamom']])

Как я могу удалить нан, чтобы получить:

 array([['beef', 'bread', 'cane_molasses'],
       ['brassica', 'butter', 'cardamom']])

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

1 Ответ

0 голосов
/ 12 ноября 2018

object Массивы dtype не поддерживают векторизованные операции. Но вы можете сделать туда и обратно, преобразовав сначала в list, а затем обратно в массив. Здесь мы используем факт np.nan != np.nan по проекту :

data = np.array([['beef', 'bread', 'cane_molasses', np.nan, np.nan, np.nan],
                 ['brassica', 'butter', 'cardamom']])

res = np.array([[i for i in row if i == i] for row in data.tolist()])

array([['beef', 'bread', 'cane_molasses'],
       ['brassica', 'butter', 'cardamom']], 
      dtype='<U13')

Обратите внимание, что результирующий массив будет иметь строковые типы (здесь с максимальной длиной 13). Если вам нужен массив object dtype, который может содержать произвольные объекты, вам нужно указать dtype=object:

res = np.array([[i for i in row if i == i] for row in data.tolist()], dtype=object)

array([['beef', 'bread', 'cane_molasses'],
       ['brassica', 'butter', 'cardamom']], dtype=object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...