Использование str.extract
:
df['col2'] = df.col2.str.extract(f"({'|'.join(color)})", expand=False)
df
col1 col2
0 A green
1 B blue
2 C blue
3 D red
4 E green
5 F red
Для повышения производительности вы можете использовать представление списка, в котором используется предварительно скомпилированный шаблон регулярных выражений для выполнения re.search
:
import re
p = re.compile(rf"({'|'.join(color)})")
def try_extract(s):
try:
return p.search(s).group(1)
except (TypeError, AttributeError):
return s
df['col2'] = [try_extract(s) for s in df['col2']
df
col1 col2
0 A green
1 B blue
2 C blue
3 D red
4 E green
5 F red
Если цвет не совпадает, как сохранить исходный цвет?Я не хочу, чтобы значения nan были там.
Это автоматически обрабатывается try_except
:
df2 = df.append(pd.Series(
{'col1': 'G', 'col2': 'something else'}), ignore_index=True)
df2['col2'] = [try_extract(s) for s in df2['col2']]
df2
col1 col2
0 A green
1 B blue
2 C blue
3 D red
4 E green
5 F red
6 G something else # other values are preserved.
Для получения дополнительной информации о том, почему понимание списков следует рассматривать как конкурентную альтернативу,Вы можете проверить Для петель с пандами - Когда я должен заботиться? .