Преобразуйте столбец Pandas 'DOB' в 'Age', но он имеет значения NaT / пустые, из-за чего выдается ошибка «NaTType не поддерживает strftime» - PullRequest
0 голосов
/ 29 мая 2020

У меня есть данные клиента, содержащие столбец DOB, и я хочу вычислить возраст, но отсутствуют ячейки, поэтому возникает ошибка «NaTType не поддерживает strftime». Я хочу заполнить недостающее значение средним возрастом позже. Вот что я пробовал

for row in new_data['DOB']:
    if row is pd.NaT:
        continue
    else:
        new_data['DOB'] = new_data['DOB'].apply('{:06}'.format)
        now = pd.Timestamp('now')
        new_data['DOB'] = pd.to_datetime(new_data['DOB'], format='%m%d%y')    
        new_data['DOB'] = new_data['DOB'].where(df['DOB'] < now, new_data['DOB'] -  np.timedelta64(100, 'Y'))
        new_data['age'] = (now - new_data['DOB']).astype('<m8[Y]')

new_data

1 Ответ

1 голос
/ 29 мая 2020

Предполагая, что ваш столбец DOB имеет datetime время, вы можете сделать (pd.Timestamp('now')-df.DOB)/pd.Timedelta('1Y').

Пример:

df = pd.DataFrame({'DOB': pd.to_datetime('2020')-pd.to_timedelta(pd.np.random.randint(7000,20000,5), 'D')})
df.iloc[[1,3]] = None

df['age'] = (pd.Timestamp('now') - df.DOB)/pd.Timedelta('1Y')
df.age = df.age.fillna(df.age.mean()).astype(int)

Результат:

         DOB  age
0 1997-02-05   23
1        NaT   25
2 1991-12-08   28
3        NaT   25
4 1995-12-30   24
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...