#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))