вопрос анализа данных - рассчитать возраст в годах по смешанному столбцу - PullRequest
0 голосов
/ 13 марта 2019

так что я искал в интернете, пытаясь понять, как это сделать, но у меня ничего не получилось.У меня есть набор данных примерно 5000 строк, но для простоты сделал этот кадр данных ниже.Я хочу вычислить возраст в ГОДАХ (то есть числа с месяцами делятся на 12), но я не могу понять, как позволить Python идентифицировать число.Любые идеи или направления вы можете указать мне?

test = (3, 6, 1, '7 m', '8 m', 5, 11, '10 m','almost 4 m', '9 y & m', '3 Yr 7 mths')
test_list = list(test) 
test_series = pd.Series(test_list) 
df_test = pd.DataFrame(test_series) 
df_test.rename(columns = {0:'Key'}, inplace = True)
df_test['Years_Old'] = np.nan df_test

1 Ответ

0 голосов
/ 13 марта 2019

С помощью регулярных выражений мы можем сначала извлечь подстроки, такие как «[число] [пробел (с) (необязательно)] [у или м (необязательно)]» (без учета регистра), а затем умножить [число] с на 1/12, если[y или m] равно «m» (поскольку мы считаем количество лет), а затем суммируем все для каждой записи:

import re

z = df_test['Key'].astype(str).str.extractall('(\d+)\s*([mMyYwW])?').fillna('m').astype({0: int, 1: str})
df_test['Years_Old'] = (z[0] * z[1].str.lower().map({'y': 1, 'm': 1/12, 'w': 1/52})).groupby(level=0).sum()

print(df_test)

Вывод:

            Key  Years_Old
0             3   0.250000
1             6   0.500000
2             1   0.083333
3           7 m   0.583333
4           8 m   0.666667
5             5   0.416667
6            11   0.916667
7          10 m   0.833333
8    almost 4 m   0.333333
9       9 y & m   9.000000
10  3 Yr 7 mths   3.583333
11         10 w   0.192308

Примечания:

  1. По умолчанию, если не задано г / м, я предполагаю месяцы, но при необходимости легко переключиться на годы с помощью .fillna('y') вместо .fillna('m') в строке z = ...
  2. Не уверен, что означает «9 лет», поэтому воспринимаю это как 9 лет
...