print (df)
col1 col2
0 A dark green
1 B sea blue
2 C blue
3 D exclusive red
4 E green
5 F pale <- not matched value
color=['green','blue','red']
pat = r'({})'.format('|'.join(color))
df['col2'] = df['col2'].str.extract(pat, expand=False).fillna(df['col2'])
print (df)
col1 col2
0 A green
1 B blue
2 C blue
3 D red
4 E green
5 F pale
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
为了获得更好的性能,您可以使用使用预编译regex模式的列表理解来执行re.search:
^{pr2}$
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
If the color doesn't match how to keep keep the original color? I
don't want nan values there.
这由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.
将^{} 与} 将不匹配的值(
|
连接的值一起使用|
表示regexOR
,最后一个add ^{NaN
s)替换为原始列:使用
str.extract
:为了获得更好的性能,您可以使用使用预编译regex模式的列表理解来执行
^{pr2}$re.search
:这由
try_except
自动处理:关于为什么列表理解应该被视为一种竞争性的替代方案的更多信息,您可以查看For loops with pandas - When should I care?。在
相关问题 更多 >
编程相关推荐