Лямбда-функция в pd df с оператором if приводит к синтаксической ошибке - PullRequest
0 голосов
/ 23 марта 2020

У меня есть df, где в одном столбце содержатся значения в виде строк, в которые входят числа и значения nan. Этот столбец представлен в виде строки, где каждое значение в строке разделено using :(colan)instead of , (comma) (см. Ниже столбец № n представлен как cln)

index cl1   cl2    .... cln
0      1.1  6.4    .    '12.30 : 14.27 : nan : 15.87, nan .....'
1      2    5.3         '12.8 : 13.73 : nan : 15.87, 12.8 .....'
2      5    6.6
.     .     . 
.     .     .
.     .     .
.    
m     cl1m cl2m          '12.8 : 13.73 : nan : 15.87, 12.8 .....'

Я хочу заменить: вместо запятой используется одна строка кода с использованием лямбда-фн.

df['cln'] = df['cln'].apply(lambda x : x.replace(':', ',') if x != np.nan)

Но я получил следующую ошибку

SyntaxError: invalid syntax

Даже я попробовал приведенный ниже код, но он показывает ту же ошибку

df['cln'] = df['cln'].apply(lambda x : x.replace(':', ',') if type(x) = str)
# since nan is float

я знаю, как использовать для l oop и решить эту проблему, но я просто хочу чтобы узнать, почему он не работает, используя лямбда-выражения

Ожидая ответов pythoni c на эту проблему

1 Ответ

3 голосов
/ 23 марта 2020

Вам нужен else:

df['cln'] = df['cln'].apply(lambda x : x.replace(':', ',') if x != np.nan else x)

Или еще лучше, просто отфильтруйте ноль:

df[df['cln'].notnull()].apply(lambda x: x.replace(':', ','))

В противном случае вы можете увидеть этот результат:

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