Сначала я пытаюсь воспроизвести вашу проблему без приведенного примера.
import pandas as pd
import re
df = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['q', 'w', 'e']})
d_comp = {
re.compile('a'): 'new_a',
re.compile('q'): 'new_q',
}
def parse_repl(df_item):
for pattern, replacement in d_comp.items():
df_item = pattern.sub(replacement, df_item)
return df_item
df.apply(parse_repl)
При использовании df.apply
переданная в него функция должна воспринимать последовательность как аргумент
pattern.sub(replacement, df_item)
не будет работать, так как df_item
здесь не является ни строкой, ни байтом,
это серия.
Вы можете попробовать исправить parse_repl
для достижения своей цели, но я рекомендую использовать что-то вроде ниже
In [1]: import pandas as pd
...: from IPython.display import display
...:
...: df = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': ['q', 'w', 'e']})
...: display('Original')
...: display(df)
...:
...: regex_to_replace = {
...: 'a': 'new_a',
...: 'q': 'new_q',
...: }
...:
...: for column_name in df:
...: column = df[column_name]
...: for regex_patten, replacement in regex_to_replace.items():
...: column = column.str.replace(regex_patten, replacement)
...:
...: df[column_name] = column
...:
...: display('Replaced')
...: display(df)
...:
...:
'Original'
x y
0 a q
1 b w
2 c e
'Replaced'
x y
0 new_a new_q
1 b w
2 c e