Как вычислить возраст в эксель файле при условии что у некоторых возраста нет есть дата рождения и дата смерти,а если нет смерти?
name gender dob dod age
0 Данил мужчина 1980-01-19 2019-02-16 NaN
1 Владимир мужчина 2002-12-24 20.0
2 Дмитрий мужчина 2001-11-04 21.0
3 Богдан мужчина 2002-11-06 NaN
excel_file = ".\Книга1.xlsx"
df = pd.read_excel(excel_file)
df['dob']=pd.to_datetime(df['dob']).astype("datetime64[ns]")
df['dod']=pd.to_datetime(df['dod']).astype("datetime64[ns]")
now=pd.Timestamp('now')
if df["age"].isnull:
df['age']=(df['dod']-df["dob"]).astype('m8[Y]')
print(df["age"])
else:
df['age'] = (now - df["dob"]).astype('m8[Y]')
print(df['age'])
оно считает правильно но не видит остального
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Нужно мыслить "векторно" и заполнять сразу все значения столбца. Как-то так, наверное:
mask = df['age'].isna()
df.loc[mask, "age"] = (df.loc[mask, 'dod'].fillna(now)-df.loc[mask, "dob"]).astype('m8[Y]')
То есть:
- Работаем только с теми строками столбца "age", в которых значение
NA - Делаем столбцу "dod"
fillna(now), таким образом будет использована либо дата смерти (если она там есть), либо текущая дата (если тамNA) - Ну и вычитаем из преобразованного столбца "dod" столбец "dob" и помещаем результат в столбец "age"