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