Python:替换不区分大小写的标志不起作用

Python: replace case insensitive flag doesn't work

在我的数据框中,我想用一个一致的字符串替换不同的表示方式。示例:

  1. 将 [COM, COMMERCIAL] 替换为“商业”。
  2. 将[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...Commercial'

而不是 'Commercial'

str.replace or 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