python - Python:替换不区分大小写的标志不起作用
问题描述
在我的数据框中,我想用一个一致的字符串替换不同的表示方式。例子:
- 将 [COM, COMMERCIAL] 替换为“商业”。
- 将 [FALSE, False, false, NO, No, N] 替换为 N 等等。
要替换的值列表和替换值来自另一个数据帧,并且会在我遍历主数据帧中的每一列时发生变化。
应该工作的理想解决方案是:
dfPA[col] = dfPA[col].replace(f'(?i){valold}', key)
where
valold = ['COM', 'COMMERCIAL']
key = 'Commercial'
这行不通。也许是因为 valold 是一个列表。所以我尝试了:
for val in valold:
dfPA[col] = dfPA[col].replace(f'(?i){val}', key)
它仍然不起作用。有什么想法吗?
注意:我不能使用dfPA[col] = dfPA[col].str.replace(valold, key, case=False, regex=False)
,因为正如这里所解释的,它也会替换子字符串。然后我看到的不是“商业”,而是“ComCom ...商业”
解决方案
要么 要么str.replace
可以使用。只需确保模式与整个单元格匹配的字符串的开始 ( ) 和结束 ( ) 匹配。replace
^
$
str.replace
:
for val in valold:
dfPA[col] = dfPA[col].str.replace(rf'^{val}$', key, case=False, regex=True)
replace
:
for val in valold:
dfPA[col] = dfPA[col].replace(rf'(?i)^{val}$', key, regex=True)
*regex=False
默认情况下,replace
如果regex
没有设置,不区分大小写修饰符将无法用于替换,regex=True
因为它将逐字匹配字符“(?i)”。
样本数据和输出:
import pandas as pd
dfPA = pd.DataFrame({
'col': ['COM', 'COMMERCIAL', 'COmMErCIaL', 'Something else',
'comical']
})
valold = ['COM', 'COMMERCIAL']
key = 'Commercial'
col = 'col'
for val in valold:
dfPA[col] = dfPA[col].str.replace(rf'^{val}$', key, case=False, regex=True)
print(dfPA)
col
0 Commercial
1 Commercial
2 Commercial
3 Something else
4 comical
推荐阅读
- javascript - 如何配置 webpack-dev-server 在重新加载之前关闭浏览器上的“beforeunload”事件?
- postgresql - 在 repmgr 中分配虚拟 IP
- sql - Bigquery View 没有进行分区修剪
- javascript - 如何使用 mocha/chai 测试 ejs/nodejs 功能?
- gitlab-ci - 为什么gitlab ci不执行规则?
- r - 使用 ggplot 绘制纵向数据的总体趋势
- mysql - 在 SQL 中混合排序规则的正确配置?
- python - 在 manim 中异步运行不同的动画
- kubernetes - 在 GKE 控制台中注册集群时出错
- python - 使用烧瓶登录外部网站