如何使用Python通过通配符替换DataFrame特定列匹配值
需求说明
我需要替换DataFrame特定列中以指定字符串开头、结尾或包含指定字符串的值。比如在下面的DataFrame里,若‘Sr no#’列的内容包含‘updated’(不区分大小写,但单独的‘Updated’除外),就把这些值替换为空值:
示例DataFrame
| Sr no# |
|---|
| 123 |
| abcd |
| NOTUPDATED |
| notupdated |
| Notupdated |
| Updated |
| joan aulia UPDATED |
| nameUPDATED |
| not |
预期输出
| Sr no# |
|---|
| 123 |
| abcd |
| Updated |
| not |
解决方案
用Pandas结合正则表达式就能实现这个需求,步骤如下:
- 导入Pandas并创建示例DataFrame
import pandas as pd data = { 'Sr no#': ['123', 'abcd', 'NOTUPDATED', 'notupdated', 'Notupdated', 'Updated', 'joan aulia UPDATED', 'nameUPDATED', 'not'] } df = pd.DataFrame(data)
- 匹配条件并替换
我们需要匹配**包含'updated'(不区分大小写)但不等于单独的'Updated'**的行,这里用正则表达式^(?!Updated$).*(?i)updated.*$实现:
(?!Updated$):排除正好是'Updated'的行(?i):开启不区分大小写模式updated:匹配目标字符串.*:匹配前后任意长度的字符
执行替换的代码有两种方式,选一种即可:
# 方法1:使用replace正则替换 df['Sr no#'] = df['Sr no#'].replace(to_replace=r'^(?!Updated$).*(?i)updated.*$', value='', regex=True) # 方法2:用loc定位符合条件的行再替换 # df.loc[df['Sr no#'].str.contains(r'(?i)updated', regex=True) & (df['Sr no#'] != 'Updated'), 'Sr no#'] = ''
运行后就能得到预期的输出结果。
内容的提问来源于stack exchange,提问作者beginner_Coder
相关产品推荐
相关产品推荐

