Вычитая время и получая в годах, округляется до двух десятичных знаков - PullRequest
1 голос
/ 03 ноября 2019

У меня есть набор данных с днями рождения клиентов, и я хочу преобразовать эту переменную в возраст в годах, округленный до двух или трех знаков после запятой. Я выяснил, как преобразовать весь столбец во временную метку.

Одна проблема заключается в том, что я не знаю, сколько лет данным, но они были размещены на веб-сайте 4 апреля 2019 года, поэтому я 'используя этот день как «сегодня» для расчета дельты времени.

Когда я пытаюсь вычесть две даты, разница в днях.

Вот что у меня есть и TIA для любой помощи:

Данные начинаются с DOB в формате день-месяц-год, то есть: 30-12-1993

## Making sure all observations are in same format
training_df['DATE_OF_BIRTH'] = pd.to_datetime(training_df['DATE_OF_BIRTH'])


## Checking format of an individual DOB
training_df['DATE_OF_BIRTH'][0]

Out[121]:
Timestamp('1984-01-01 00:00:00')


## Setting "today" as 4-4-2019
data_time_reference=datetime(2019, 4, 4)

data_time_reference

Out[155]:
datetime.datetime(2019, 4, 4, 0, 0)


## Subtracting
data_time_reference - training_df['DATE_OF_BIRTH'][0]

Выходные данные

Timedelta('12877 days 00:00:00')

, когда мне нужно, чтобы это было 35,26 (что составляет 12 877, разделенное на 365,25)

данные находятся на Kaggle.com: https://www.kaggle.com/avikpaul4u/vehicle-loan-default-prediction

1 Ответ

1 голос
/ 03 ноября 2019

Рассмотрим следующий кадр данных:

  DATE_OF_BIRTH
0    01-01-1984
1    30-12-1993
2    02-12-1997
3    04-07-1963
4    14-04-2000
#Convert the values in dates column to datetime object
df['DATE_OF_BIRTH'] = pd.to_datetime(df['DATE_OF_BIRTH'])

#Set the reference date to subtract
data_time_reference= datetime(2019, 4, 4)

#Get the no of days (integer) after subtracting from reference date
df['days_int'] = pd.to_numeric((data_time_reference - df['DATE_OF_BIRTH']).dt.days, downcast='integer')

print(df)

Теперь это выглядит так:

  DATE_OF_BIRTH  days_int
0    1984-01-01     12877
1    1993-12-30      9226
2    1997-02-12      8086
3    1963-04-07     20451
4    2000-04-14      6929

Затем разделите столбец days_int на 365.25 и округлите до 2десятичные разряды.

df['result'] = (df['days_int']/365.25).round(2)

Конечный результат:

  DATE_OF_BIRTH  days_int  result
0    1984-01-01     12877   35.26
1    1993-12-30      9226   25.26
2    1997-02-12      8086   22.14
3    1963-04-07     20451   55.99
4    2000-04-14      6929   18.97
...