当前位置: 首页 > 面试题库 >

熊猫替换和不区分大小写

东方高洁
2023-03-14
问题内容

使得更换不区分大小写似乎并不在下面的例子中(我要替换的效果 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

注意

您将需要\.在正则表达式模式下转义句点,因为未转义的点是具有不同含义(匹配任何字符)的元字符。如果您想动态地转义模式中的元字符,可以使用re.escape

有关标志和锚点的更多信息,请参阅文档和reHOWTO的本部分。

从源代码中可以很明显地看出,if忽略了“
case”参数regex=False。看到

# Check whether repl is valid (GH 13438, GH 15055)
if not (is_string_like(repl) or callable(repl)):
    raise TypeError("repl must be a string or callable")

is_compiled_re = is_re(pat)
if regex:
    if is_compiled_re:
        if (case is not None) or (flags != 0):
            raise ValueError("case and flags cannot be set"
                             " when pat is a compiled regex")
    else:
        # not a compiled regex
        # set default case
        if case is None:
            case = True

        # add case flag, if provided
        if case is False:
            flags |= re.IGNORECASE
    if is_compiled_re or len(pat) > 1 or flags or callable(repl):
        n = n if n >= 0 else 0
        compiled = re.compile(pat, flags=flags)
        f = lambda x: compiled.sub(repl=repl, string=x, count=n)
    else:
        f = lambda x: x.replace(pat, repl, n)

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

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



 类似资料:
  • 问题内容: 我知道这个问题有很多主题,但是没有一种方法适合我,因此我将发布有关我的具体情况的信息 我有一个看起来像这样的数据框: 我想做的是将“性别”列中的全0替换为“女”,并将所有1替换为“男”,但是当我使用上面的代码时,数据框中的值似乎没有变化 我是否使用了replace()错误?还是有更好的方法进行条件值替换? 问题答案: 是的,您使用的是错误的,默认情况下不是就地操作,它会返回替换的数据框

  • 问题内容: 鉴于熊猫0.20.0的更新和弃用,我想知道用其余的和获得相同结果的最有效方法是什么。我只是回答了这个问题,但是第二种选择(不使用)似乎效率低下且冗长。 片段: 同时使用条件和索引位置过滤时,这是正确的方法吗? 问题答案: 通过用位置对特定索引进行切片来获得所需的索引值,您可以留在一个单一的世界中。

  • 问题内容: 我需要不区分大小写地突出显示JavaScript字符串中的给定关键字。 例如: 应该回来 我需要用于任何关键字的代码,因此使用像硬编码的正则表达式这样的解决方案还不够。 最简单的方法是什么? (这是标题中详述的更一般问题的实例,但我认为最好用一个具体,有用的示例来解决。) 问题答案: 你 可以 ,如果你准备搜索字符串使用正则表达式。在PHP中,例如有一个函数preg_quote,它用转

  • 我想让用户选择进行区分大小写或不区分大小写的搜索。 我的想法是使用区分大小写的分析器对数据进行索引,然后根据用户输入使用区分大小写或不区分大小写的分析器进行搜索。 因此,我创建了区分大小写的分析器,下面是我的简单代码: 对于索引,我使用了以下方法: 对于搜索,我使用: 当我对此感到厌倦时,敏感的案例起了作用,但不敏感的案例没有起作用。 经过更多的研究,我发现使用区分大小写的分析器和低关注度的查询是

  • 对于报告(0.1%的所有查询),我需要返回一个所有可能类别的列表,区分大小写! 考虑以下文件: 运行以下查询: 返回: 是否有方法返回区分大小写的类别(存储在文档中)?我对此查询结果中的感兴趣。 Elasticsearch论坛中的问题 谢谢,伊泰