Я думаю, что это для работы с NaN
s, потому что:
np.nan != np.nan
, поэтому, если NaN
s, он возвращает NaN
s, иначе обрабатывает строки.
Пример:
check = pd.DataFrame({'Id':[np.nan, '0909.0', '023', '09.06']})
a = check['Id'].map(lambda x: x if x != x else (str(x)[:str(x).rfind('.0')] if str(x).rfind('.0') != -1 else str(x)))
print (a)
0 NaN
1 0909
2 023
3 09
Name: Id, dtype: object
Если его опустить, это работает, потому что выполняется преобразование в строки, но первое значение не np.nan
, а строка nan
:
a = check['Id'].map(lambda x: (str(x)[:str(x).rfind('.0')] if str(x).rfind('.0') != -1 else str(x)))
print (a)
0 nan
1 0909
2 023
3 09
Name: Id, dtype: object
Если все значения являются строками сNaN
s и удалить преобразование в строки:
a = check['Id'].map(lambda x: ((x)[:(x).rfind('.0')] if (x).rfind('.0') != -1 else (x)))
print (a)
AttributeError: у объекта 'float' нет атрибута 'rfind'
a = check['Id'].map(lambda x: x if x != x else ((x)[:(x).rfind('.0')] if (x).rfind('.0') != -1 else (x)))
print (a)
0 NaN
1 0909
2 023
3 09
Name: Id, dtype: object