Python:替换不区分大小写的标志不起作用
Python: replace case insensitive flag doesn't work
在我的数据框中,我想用一个一致的字符串替换不同的表示方式。示例:
- 将 [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...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
在我的数据框中,我想用一个一致的字符串替换不同的表示方式。示例:
- 将 [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)
,因为正如
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