У меня есть данные, подобные следующим:
df = pd.DataFrame({'pagePath':['/my/retour/details/n8hWu7iWtuRXzSvDvCAUZRAlPda6LM/',
'/my/orders/details/151726/',
'/my/retours/retourmethod/']})
print(df)
pagePath
0 /my/retour/details/n8hWu7iWtuRXzSvDvCAUZRAlPda...
1 /my/orders/details/151726/
2 /my/retours/retourmethod/
Что я хочу сделать, это обрезать строку до (но в том числе) details
Ожидаемый результат
pagePath
0 /my/retour/details/
1 /my/orders/details/
2 /my/retours/retourmethod/
Следующее работает , но медленно
df['pagePath'] = np.where(df.pagePath.str.contains('details'),
df.pagePath.apply(lambda x: x[0:x.find('details')+8]),
df.pagePath)
print(df)
pagePath
0 /my/retour/details/
1 /my/orders/details/
2 /my/retours/retourmethod/
Я попробовал регулярное выражение , но смог заставить его работать только , исключая :
df['pagePath'] = np.where(df.pagePath.str.contains('details'),
df.pagePath.str.extract('(.+?(?=details))'),
df.pagePath)
print(df)
pagePath
0 /my/retour/
1 /my/orders/
2 NaN
Плюс код регулярного выражения возвращает NaN
, когда строка не содержит details
Так что я чувствую, что есть более простой и элегантный способ для этого. Как бы я написал код регулярного выражения, чтобы решить мою проблему? Или моего решения уже достаточно?