DataFrame содержит текстовый столбец с возрастом со словами «недели» и т. Д., Как преобразовать его в int? - PullRequest
0 голосов
/ 04 ноября 2018

введите описание изображения здесь У меня есть датафрейм с возрастом:

AgeInYears

0 1 год

1 1 год

2 2 года

3 3 недели

4 2 года

5 1 месяц

6 3 недели

7 3 недели

Я должен преобразовать его в возраст в int:

AgeInYears

0 1

1 1

2 2

3 0,06

4 2

5 0,08

6 0,06 7 0,06

сначала я начал заменять все, что содержит "годы" animals['AgeInYears'].str.replace('years','').str.replace('year','')

но я понятия не имею, как сделать расчет за недели и месяцы. Лямбда-функция?

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете создать условия, которые, если недели, то взять значение и разделить на 52:

df = pd.DataFrame({'AgeInYears':['1 year', '1 year', '2 years', '3 weeks', '2 years',
                                '1 month', '3 weeks', '3 weeks']})

# split the column into 2
df = df['AgeInYears'].str.split(expand=True)
df[0] = df[0].astype(int)

    0   1
0   1   year
1   1   year
2   2   years
3   3   weeks
4   2   years
5   1   month
6   3   weeks
7   3   weeks

тогда вы можете использовать np.select для ваших условий:

conditions = [
    (df[1].str.contains('year')),
    (df[1].str.contains('week')),
    (df[1].str.contains('month'))
]

choices = [
    df[0],
    df[0]/52,
    df[0]/12
]

df['newValue'] = np.select(conditions,choices,default=np.nan)

    0   1       newValue
0   1   year    1.000000
1   1   year    1.000000
2   2   years   2.000000
3   3   weeks   0.057692
4   2   years   2.000000
5   1   month   0.083333
6   3   weeks   0.057692
7   3   weeks   0.057692
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...