Как вычислить возраст в эксель файле при условии что у некоторых возраста нет есть дата рождения и дата смерти,а если нет смерти?

Рейтинг: 0Ответов: 1Опубликовано: 15.02.2023
       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'])

оно считает правильно но не видит остального

Ответы

▲ 0Принят

Нужно мыслить "векторно" и заполнять сразу все значения столбца. Как-то так, наверное:

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"