если не это или это то в лямбда-питоне панды - PullRequest
0 голосов
/ 12 февраля 2019

Я округляю значения в pandas df, но я хочу поймать значения, которые не могут быть округлены, например, nans, строки и т. Д.

Пример ниже работает нормально и правильно ловит nans:

df = df.applymap(lambda x: int(round(float(x))) if not isnan(x) else x)

но как мне добавить "-" к этому коду.

Моя неудачная попытка:

df = df.applymap(lambda x: int(round(float(x))) if not isnan(x) if not "-" else x)

1 Ответ

0 голосов
/ 12 февраля 2019

Использование последовательности or логических тестов должно помочь вам.

df = df.applymap(lambda x: int(round(float(x))) if not (isinstance(x, str) or math.isnan(x) or x<0) else x)

Сначала этот код проверит, является ли x строкой.Если это не так, он проверит, если nan.Если это не так, он проверит, является ли значение отрицательным (я считаю, что эту последнюю часть можно удалить).Если какой-либо из этих операторов возвращает True, программа немедленно не округляет значение.Иначе так и будет.

Вы можете даже добавить больше правил к этому утверждению, но вам придется обратить внимание: порядок их добавления будет определять, будут ли работать правила.Например, если я вставил правила в следующем порядке, система выдаст ошибку при поиске строкового значения:

x<0 or math.isnan(x) or isinstance(x, str)

Это происходит потому, что первая попытка проверить заданное значение будет заключаться в тесте.чтобы проверить, если это отрицательное число.Однако это сравнение не будет работать со строкой.Вот почему мы сначала добавляем правило, чтобы проверить, является ли оно строкой, прежде чем продолжить.

Поэтому при добавлении правил я повторяю: будьте осторожны с порядком их вставки!

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