使替换不区分大小写似乎在以下示例中没有效果(我想用 jr 替换 jr. 或 Jr.):

In [0]: pd.Series('Jr. eng').str.replace('jr.', 'jr', regex=False, case=False)
Out[0]: 0    Jr. eng

为什么?我有什么误解?

最佳答案

case 参数实际上是一种方便的替代指定 flags=re.IGNORECASE 。如果替换不是基于正则表达式,则它与替换无关。

因此,当 regex=True 时,这些是您可能的选择:

pd.Series('Jr. eng').str.replace(r'jr\.', 'jr', regex=True, case=False)
# pd.Series('Jr. eng').str.replace(r'jr\.', 'jr', case=False)

0    jr eng
dtype: object

或者,
pd.Series('Jr. eng').str.replace(r'jr\.', 'jr', regex=True, flags=re.IGNORECASE)
# pd.Series('Jr. eng').str.replace(r'jr\.', 'jr', flags=re.IGNORECASE)

0    jr eng
dtype: object

您还可以通过将不区分大小写的标志作为 ?i 模式的一部分合并来变得厚脸皮并绕过这两个关键字参数。看
pd.Series('Jr. eng').str.replace(r'(?i)jr\.', 'jr')
0    jr eng
dtype: object



有关标志和 anchor 的更多信息,请参阅 this section of the docs re HOWTO

source code ,很明显,如果 regex=False ,“case”参数将被忽略。看



您可以看到 case 参数仅在 if 语句中检查。

IOW,唯一的方法是确保 regex=True 以便替换是基于正则表达式的。

关于python - Pandas .str.replace 和不区分大小写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53863941/

10-12 19:33