numpy от iter: вернуть NaN при обнаружении указанной c строки? - PullRequest
0 голосов
/ 16 января 2020

Предположим, у меня есть:

x = [ '0','1','' ]

Как мне оценить этот список следующим образом:

np.fromiter(x,dtype=float)

В настоящее время происходит сбой на пустых строках. В идеале он возвращает nan для пустых строк, но не для нечисловых c строк. Есть ли способ сделать это?

Моё предварительное решение:

np.fromiter(map(lambda s: 'nan' if s == '' else s,x),dtype=float)

Но, возможно, есть решение numpy, которое быстрее для больших операций ввода-вывода?

1 Ответ

0 голосов
/ 17 января 2020

Решение проблемы, описанной в теле вопроса:

def asfarray_option(siter: Iterable[str]) -> Optional[np.ndarray]:
    return np.fromiter(map(lambda v: v or 'nan', siter),dtype=float)

Решение проблемы, описанной в заголовке вопроса:

def asfarray_option(match:str,replace:Any,siter:Iterable[str]) -> Optional[np.ndarray]:
    return np.fromiter(map(lambda v: replace if v == match else v, siter),dtype=float)

Нет смысла делать что-либо, кроме точного соответствия внутри python для этой задачи. Используйте sed для очистки ваших данных снаружи. Это будет быстрее, чем практически все, что вы можете сделать. Распараллелить с:

parallel --pipe -k -j 40 sed 's/<your_regular_expression>//g' < file.csv

# --pipe maintains 40 compiled posix pthread fifoq's
# -k maintains order of IO
# -j job count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...