#python #regex #pandas
#python #регулярное выражение #pandas
Вопрос:
новичок в python хочет задать быстрый вопрос о том, как заменить несколько символов одновременно, учитывая, что записи могут иметь разные типы данных. Я просто хочу изменить строки и сохранить все остальное как есть:
import pandas as pd
def test_me(text):
replacements = [("ID", ""),("u", "a")] #
return [text.replace(a, b) for a, b in replacements if type(text) == str]
cars = {'Brand': ['HonduIDCivic', 1, 3.2,'CarIDA4'],
'Price': [22000,25000,27000,35000]
}
df = pd.DataFrame(cars, columns = ['Brand', 'Price'])
df['Brand'] = df['Brand'].apply(test_me)
в результате
Brand Price
0 [HonduCivic, HondaIDCivic] 22000
1 [] 25000
2 [] 27000
3 [CarA4, CarIDA4] 35000
вместо
Brand Price
0 HondaCivic 22000
1 1 25000
2 3.2 27000
3 CarA4 35000
Ценю любые предложения!
Ответ №1:
Если замены никогда не содержат идентичных поисковых фраз, будет проще преобразовать список кортежей в словарь, а затем использовать
import re
#...
def test_me(text):
replacements = dict([("ID", ""),("u", "a")])
if type(text) == str:
return re.sub("|".join(sorted(map(re.escape, replacements.keys()),key=len,reverse=True)), lambda x: replacements[x.group()], text)
else:
return text
"|".join(sorted(map(re.escape, replacements.keys()),key=len,reverse=True))
Часть создаст регулярное выражение из re.escape
общих ключей словаря, начиная с самого длинного, чтобы избежать проблем при обработке вложенных поисковых фраз, которые имеют один и тот же префикс.
Тест Pandas:
>>> df['Brand'].apply(test_me)
0 HondaCivic
1 1
2 3.2
3 CarA4
Name: Brand, dtype: object