Собственный метод для пропуска Nan в лямбда-функции?

#pandas #nan

#pandas #nan

Вопрос:

Мне было интересно, есть ли собственный метод для пропуска nan в лямбда-функции. У меня есть фрейм данных ‘y’ в форме ниже. Я пытаюсь превратить столбец Year в целые числа. Но лямбда-функция прерывается из-за NaN. Я придумал ниже, но мне интересно, есть ли лучшие способы решения этой распространенной проблемы? Спасибо!

        Year
137    2005
138     NaN
 

Чтобы справиться с этим, я просто использовал try / except . Интересно, есть ли лучший способ справиться с NAN.

 def turn_int(x):
    try:
        return int(x)
    except:
        return np.nan

y.Year.apply(lambda x: turn_int(x)) 
 

Ответ №1:

int не имеет представления NaN. Обычный способ справиться с этим — сначала удалить все NaN:

 year = y.Year.dropna().astype(int)
 

Комментарии:

1. единственная причина, по которой я не решаюсь это сделать, заключается в том, что индексы не совпадают. я хотел иметь возможность использовать старый фрейм данных

2. Индексы все равно будут выравниваться, когда вы выполняете операции с обоими, я не уверен, что вы имеете в виду? Возможно, вы должны использовать np.trunc(y.Year) и оставить тип данных как float, если вы действительно хотите иметь возможность видеть отсутствующие данные.

Ответ №2:

Я сделал это для серии int.

 import numpy as np
y['year'] = y['year'].apply(lambda x:x if np.isnan(x) else int(x))