Как изменить код на Python, чтобы выполнять вычисления только по строкам NOT NaN в Панд?

#python #pandas #dataframe #datetime #timestamp

Вопрос:

У меня есть фрейм данных Панд на Python, как показано ниже:

 NR
--------
910517196
921122192
NaN
 

И, используя приведенный ниже код, я пытаюсь рассчитать возраст на основе столбца NR в приведенном выше фрейме данных (неважно, как работает приведенный ниже код, я знаю, что он правильный — вкратце я беру 6 первых значений для расчета возраста, потому что, например, 910517-это 1991-05-17 :)):

 df["age"] = (ABT_DATE - pd.to_datetime(df.NR.str[:6], format = '%y%m%d')) / np.timedelta64(1, 'Y')
 

Моя проблема в том, что я могу изменить приведенный выше код для вычисления возраста, используя только значения NOT NaN в столбце «NR» в фрейме данных, тем не менее некоторые значения являются NaN.

Мой вопрос: Как я могу изменить свой код так, чтобы в расчет принимались только эти строки из столбца «NR», где нет NaN ??

В результате мне нужно что-то вроде приведенного ниже, поэтому мне просто нужно временно игнорировать строки NaN и, если в столбце NR есть NaN, вставить также NaN в столбец вычисленный возраст:

 NR         age
------------------
910517196 | 30
921122192 | 29
NaN       | NaN
 

Как я могу это сделать в Панд Python ?

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

1. df.loc[df['NR'].notna()].xxx

2. Когда я делаю это так: df[«возраст»] = (ABT_DATE — pd.to_datetime(df.loc[df[‘NR’].notna()].str[:6], формат = ‘%y%m%d’)) / np.timedelta64(1, ‘Y’) У меня ошибка: Ошибка атрибута: объект «Фрейм данных» не имеет атрибута «str», не могли бы вы принять другое решение ?

3. Мы должны отредактировать эту часть строки: df.NR.str[:6], чтобы временно игнорировать строки NaN

Ответ №1:

 df['age']=np.where(df['NR'].notnull(),'your_calculation',np.nan)