Pandas为DataFrame含*或**的单元格高亮时re.error报错如何解决
问题解决
错误原因
pandas.Series.str.contains() 默认使用正则匹配模式,* 是正则中的特殊量词,用于匹配前一个字符0次或多次,单独使用*作为匹配规则时,正则解析逻辑找不到对应的前置修饰字符,因此抛出正则解析错误。
修复方案
有两种简单的修改方式,选任意一种即可:
- 关闭正则匹配模式,使用普通字符串包含匹配,最适合当前需求
- 对正则特殊字符
*进行转义,写成\*再做匹配
这里推荐第一种方案,逻辑更简单不容易出错,完整可运行代码如下:
import numpy as np import pandas as pd df = pd.DataFrame({'Data': ['foo', '*', 'bar'], 'myda': ['**', '*', 'wer']}) def highlight_(s, props=''): # 加regex=False关闭正则匹配,na=False处理非字符串/空值场景避免报错 return np.where(s.str.contains("*", regex=False, na=False), props, '') # 应用样式后可直接在Jupyter环境渲染,或导出为html styled_df = df.style.apply(highlight_, props='background-color:yellow', axis=1) # 如果需要查看生成的样式代码可以打印styled_df.render()
内容的提问来源于stack exchange,提问作者rpb
相关产品推荐
相关产品推荐

