Извлечение целого числа из корейской текстовой строки с условием его содержимого и преобразование его в плавающие в пандах
Я немного застрял в следующей проблеме: у меня есть фрейм данных pandas, где один из столбцов - это строка текста на корейском языке, которая выглядит следующим образом:
data = {'id': [1,2,3,4,5], 'age': ['3.5년령(추정)','3개월령','5일령(추정)','3일령','1.5개월령(추정)']}
df = pd.DataFrame(data)
Условно на том, что содержит строка, мне нужно рассчитать возраст в днях. Текст в парентезе (추정), может или не может появиться в строке, и это означает "оценочный". Текст перед скобками может быть 년령 (годы), 개월령 (месяцы) или 일령 (дни). И, наконец, число перед текстом может быть целым числом или с плавающей запятой с одним или двумя десятичными знаками. Мне нужно извлечь число и преобразовать его в возраст в днях (с округлением до 0 десятичных знаков), например так:
result = {'id': [1,2,3,4,5],'age': [1278, 90, 5, 3, 45]}
df1 = pd.DataFrame(result)
Я попытался извлечь числовую часть строки с помощью регулярных выражений, как показано ниже, но она не охватывает все случаи и, похоже, не работает хорошо.
df['age'].str.replace(r'\([추정]\)$', '')
Буду признателен за любые предложения. Спасибо.
1 ответ
Использование:
d = {'년령': 365, '개월령' : 30, '일령' : 1}
pat = r'(\d*\.\d+|\d+)'
#replace by dictionary
b = df['age'].replace(d, regex=True)
#https://stackru.com/a/4703409/2901002
a = df['age'].str.extract(pat, expand=False).astype(float)
#multiple together
df['age'] = b * a
print (df)
id age
0 1 1277.5
1 2 90.0
2 3 5.0
3 4 3.0
4 5 45.0