Добавление столбца в DataFrame, заполняемого результатом поиска подстроки в существующем столбце
Есть DataFrame, загружаемый из csv-файла (это получается).
Надо сформировать (добавить) столбец, заполняемый цифрами, идущими после totalSum= в столбце F15 исходного DataFrame. В итоге родилась конструкция
df['totS'] = str(re.findall(r'\d{1,}', str(re.findall(r'totalSum=\d{1,}', str(df['F15'])))))
Запутался с преобразованием типов данных, как я понимаю. Прошу подсказки. А может, есть более изящное решение.
Ответы (3 шт):
Если во всех строках столбца разделитель одинаковый и дальше идут только искомые цифры, то можно попробовать
df['totS'] = df['F15'].astype(str).str.split('totalSum=', expand=True)[1]
Благодаря подсказке коллеги radjaz родилось громоздкое, но работающее решение вопроса:
df_gin2s_sel['totS_1'] = df_gin2s_sel['F15'].astype(str).str.split('totalSum=', expand=True)[1].astype(str).str.split('#', expand=True)[0]
Это главное. Но всё равно что-то с типами данных не то -
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
Если вопрос только в извлечении цифр из строки после totalSum=, то это легко решается с помощью метода str.extract() и регулярного выражения с последующим преобразованием в число:
df = pd.DataFrame({'F15': ['totalSum=12345#sdlknfancs', 'totalSum= 412156!это сумма!', 'totalSum= 412.156', 'totalSum= 117.25.800']})
df['new'] = df.F15.str.extract(r'totalSum=\s*([\d]+\.?[\d]*)').astype(float)
print(df)
F15 new
0 totalSum=12345#sdlknfancs 12345.000
1 totalSum= 412156!это сумма! 412156.000
2 totalSum= 412.156 412.156
3 totalSum= 117.25.800 117.250
